EOD Parse error: syntax error, unexpected end of file

  • Författare
  • Meddelande
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11176
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

EOD Parse error: syntax error, unexpected end of file

Inlägg08 okt 2019, 15:58

Jag lyfter in en fråga från chatten:

Jag håller på med uppgiften “Bygg en multisida för att söka i en databas” för kmom5. Webbsidan fungerar bra på min lokala server men när jag laddade upp den på studentservern och försöker visa den i webbläsaren får jag detta fel:
Parse error: syntax error, unexpected end of file in /home/saxon/students/20192/liba19/www/dbwebb-kurser/htmlphp/me/kmom05/jetty/src/functions.php on line 15.

Jag har kollat igenom och letat efter om jag missat något "}" eller ";" men jag hittar inget fel

Här är min kod:

Kod: Markera allt
<?php

function connectToDatabase($dsn)
{
    try {
        $db = new PDO($dsn);
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo "<p>Uppkopplingen misslycklades</p>";
        throw $e;
    }
    return $db;
}

function printJettyResultsetToHTMLTable($res)
{   
    $rows = null;
    foreach ($res as $row) {
        $rows .= "<tr>";
        $rows .= "<td><a href=\"jetty.php?page=display-details&position={$row['position']}\">{$row['position']}</a></td>";
        $rows .= "<td>{$row['boatType']}</td>";
        $rows .= "<td>{$row['boatEngine']}</td>";
        $rows .= "<td>{$row['boatLength']}</td>";
        $rows .= "<td>{$row['boatWidth']}</td>";
        $rows .= "<td>{$row['ownerName']}</td>";
        $rows .= "</tr>\n";
    }

    echo <<<EOD
    <table>
    <tr>
        <th>Position</th>
        <th>Båttyp</th>
        <th>Motor</th>
        <th>Längd</th>
        <th>Bredd</th>
        <th>Ägare</th>
    </tr>
    $rows
    </table>
    EOD;
}


SVAR

EOD; lägg den längst till vänster, inte intabbad.
https://www.php.net/manual/en/language. ... ax.heredoc

I PHP 7.3 tillåter man att EOD; är intabbad. Därför funkar det lokalt. Men studservern kör PHP 7.2 och där måste man ha den längs till vänster, annars fortsätter parsern till filens slut eftersom den inte hittade slutmärket för heredoc-konstruktionen.
https://www.php.net/manual/en/migration ... atures.php (se första featuren i php 73.

Notera felmeddelandet:
"Parse error: syntax error, unexpected end of file in"


Det är ett tecken på att PHP parsern letar igenom hela filen och slutar först när filen är slut, den hittar alltså inte EOD; konstruktionen som den letar efter.

Detta är ett vanligt fel, som man således försöker lätta upp i PHP 7.3 genom att tillåta att EOD; är intabbad. Men det ger oss alltså ett kompabilitetsbekymmer där vi måste ha koll på olika versioner.

Allt som allt är detta nyttig kunskap att veta om hur det fungerar.
...
..:
.... /mos

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 19 gäster