Parseerfout: syntaxisfout, onverwacht einde van bestand in mijn PHP-code

Ik heb een foutmelding gekregen:

Parse error: syntax error, unexpected end of file in the line

Met deze code:

<html>
    <?php
        function login()
        {
            // Login function code
        }
        if (login())
    {?>
    <h2>Welcome Administrator</h2>
    <a href=\"upload.php\">Upload Files</a>
    <br />
    <a href=\"points.php\">Edit Points Tally</a>
    <?php}
        else
        {
            echo "Incorrect login details. Please login";
        }
    ?>
    Some more HTML code
</html>

Wat is het probleem?


Antwoord 1, autoriteit 100%

U moet dit vermijden (aan het einde van uw code):

{?>

en dit:

<?php}

Je moet geen haakjes direct dicht bij de open/close php tag plaatsen, maar scheiden met een spatie:

{ ?>
<?php {

vermijd ook <? en gebruik <?php


Antwoord 2, autoriteit 29%

Ik had dezelfde fout, maar ik heb hem laten repareren door het bestand php.ini aan te passen.

Vind je php.ini-bestand, zie Kerel, waar is mijn php.ini?

open het vervolgens met uw favoriete editor.

Zoek naar een eigenschap short_open_tag en pas de volgende wijziging toe:

; short_open_tag = Off ; previous value
short_open_tag = On ; new value

Antwoord 3, autoriteit 11%

Ik had dezelfde fout, maar ik heb het verholpen door de php.ini te wijzigen en/of het PHP-bestand te bewerken!

Er zijn twee verschillende methoden om de syntaxis van de parseerfout te omzeilen.

Methode 1 (uw PHP-bestand)

Vermijd in uw PHP-bestand dit:

<? } ?>

Zorg ervoor dat je het zo plaatst

<?php ?>

Uw code bevat <? ?>

OPMERKING: De ontbrekende php na <?!

Methode 2 (php.ini-bestand)

Er is ook een eenvoudige manier om uw probleem op te lossen.
Zoek naar de eigenschapswaarde short_open_tag (Gebruik in uw teksteditor met Ctrl + F!) en pas de volgende wijziging toe:

; short_open_tag = Off

naar

short_open_tag = On

Volgens de beschrijving van core php. ini-richtlijnen, short_open_tag stelt u in staat om de korte open-tag (<?) te gebruiken, hoewel dit problemen kan veroorzaken bij gebruik met xml (<?xml werkt niet als dit is ingeschakeld)!

OPMERKING: Herlaad uw server (zoals bijvoorbeeld: Apache) en laad uw PHP-webpagina opnieuw in uw browser.


Antwoord 4, autoriteit 4%

Ga gewoon naar php.ini en zoek short_open_tag= Off ingesteld op short_open_tag= On


Antwoord 5, autoriteit 2%

Zoek naar lussen of instructies die niet gesloten zijn.

Ik was tegen dit probleem aangelopen toen ik een php foreach: tag niet gesloten achterliet.

<?php foreach($many as $one): ?>

Sluiten met het volgende loste de syntaxisfout op: unexpected end of file

<?php endforeach; ?>

Ik hoop dat het iemand helpt


Antwoord 6, autoriteit 2%

Pas ook op voor heredoc afsluitende identifiers.

Ongeldig voorbeeld:

// it's not working!!!
function findAll() {
    $query=<<<SQL
        SELECT * FROM `table_1`;
    SQL; // <-------- THIS IS BAD
    // ...
}

Hiermee wordt een uitzondering gegenereerd die lijkt op het volgende:

<br />
<b>Parse error</b>:  syntax error, unexpected end of file in <b>[...][...]</b> on line <b>5</b><br />

waarbij nummer 5 het laatste regelnummer van uw bestand kan zijn.

Volgens de php-handleiding:

Waarschuwing
Het is erg belangrijk op te merken dat de regel met de afsluitende identifier geen andere tekens mag bevatten, behalve een puntkomma (;). Dat betekent vooral dat de identifier niet mag inspringen en dat er geen spaties of tabs voor of na de puntkomma mogen staan. Het is ook belangrijk om te beseffen dat het eerste teken voor de afsluitende identifier een nieuwe regel moet zijn zoals gedefinieerd door het lokale besturingssysteem. Dit is \n op UNIX-systemen, inclusief macOS. Het afsluitende scheidingsteken moet ook worden gevolgd door een nieuwe regel.

TLDR: afsluitende ID’s mogen NIET worden ingesprongen.

Geldig voorbeeld:

function findAll() {
    $query=<<<SQL
        SELECT * FROM `table_1`;
SQL;
    // closing identifier should not be indented, although it might look ugly
    // ...
}

Antwoord 7

Controleer of je je les hebt afgesloten.

Als je bijvoorbeeld een controllerklasse met methoden hebt, en je verwijdert per ongeluk de laatste haak, die de hele klasse sluit, krijg je deze foutmelding.

class someControler{
private $varr;
public $varu;
..
public function method {
..
} 
..
}// if you forget to close the controller, you will get the error

Antwoord 8

zoek ook naar een opmerking // die de accolade sluiten

if (1==1) { //echo "it is true"; }

de accolade sluiten zal de voorwaardelijke sectie niet goed sluiten en php zal de rest van de code niet goed verwerken.


Antwoord 9

Ook dit vermijden <? } ?> zorg ervoor dat u <?php } ?>


Antwoord 10

Ik heb enkele fouten gezien, die ik hieronder heb opgelost.

Dit is wat ik kreeg als onjuist:

if (login())
{?>
<h2>Welcome Administrator</h2>
<a href=\"upload.php\">Upload Files</a>
<br />
<a href=\"points.php\">Edit Points Tally</a>
<?php}
else
{
echo "Incorrect login details. Please login";
}

Dit is hoe ik het zou hebben gedaan:

<html>
    some code
<?php
function login()
{
    if (empty ($_POST['username']))
    {
        return false;
    }
    if (empty ($_POST['password']))
    {
        return false;
    }
    $username = trim ($_POST['username']);
    $password = trim ($_POST['password']);
    $scrambled = md5 ($password . 'foo');
    $link = mysqli_connect('localhost', 'root', 'password');
    if (!$link)
    {
        $error = "Unable to connect to the database server";
        include 'error.html.php';
        exit ();
    }
    if (!mysqli_set_charset ($link, 'utf8'))
    {
        $error = "Unable to set database connection encoding";
        include 'error.html.php';
        exit ();
    }
    if (!mysqli_select_db ($link, 'foo'))
    {
        $error = "Unable to locate the foo database";
        include 'error.html.php';
        exit ();
    }
    $sql = "SELECT COUNT(*) FROM admin WHERE username = '$username' AND password = '$scrambled'";
    $result = mysqli_query ($link, $sql);
    if (!$result)
    {
        return false;
        exit ();
    }
    $row = mysqli_fetch_array ($result);
    if ($row[0] > 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
if (login())
{
echo '<h2>Welcome Administrator</h2>
<a href=\"upload.php\">Upload Files</a>
<br />
<a href=\"points.php\">Edit Points Tally</a>';
}
else
{
    echo "Incorrect login details. Please login";
}
?>
some more html code
</html>

Antwoord 11

Een ander geval waarin het moeilijk te herkennen is, is wanneer je een bestand hebt met alleen een functie. Ik weet dat dit geen algemeen gebruik is, maar het is vervelend en moest de fout opsporen.

<?php
function () {
}

Het bovenstaande bestand retourneert de fout Parse error: syntax error, unexpected end of file in terwijl het onderstaande dat niet doet.

<?php
function () {
};

Antwoord 12

In mijn geval was de boosdoener de enige openingstag <?php in de laatste regel van het bestand. Blijkbaar werkt het op sommige configuraties zonder problemen, maar veroorzaakt het problemen op andere.


Antwoord 13

Voor mij is de meest voorkomende oorzaak een weggelaten }-teken, zodat een functie- of if-statementblok niet wordt beëindigd. Ik los dit op door een } teken in te voegen na mijn recente bewerkingen en het vanaf daar te verplaatsen. Ik gebruik een editor die openingshaakjes kan vinden die overeenkomen met een haakje sluiten, dus die functie helpt ook (het lokaliseert de functie die niet correct is beëindigd).

We kunnen hopen dat taalvertolkers en compilers op een dag wat werk zullen doen om betere foutmeldingen te genereren, aangezien het zo gemakkelijk is om een ​​afsluitend haakje weg te laten.

Als dit iemand helpt, stem dan alsjeblieft op het antwoord.


Antwoord 14

Als aanvulling op andere antwoorden kan het ook te wijten zijn aan de automatische verkleining van uw php-script als u een ftp-client zoals FileZilla gebruikt. Zorg ervoor dat het overdrachtstype is ingesteld op Binair en niet op ASCII of automatisch. Het ASCII- of automatische overdrachtstype kan uw php-code verkleinen en tot deze fout leiden.


Antwoord 15

Dit is geen antwoord op uw code, maar een antwoord op dezelfde foutmelding. Het kan nuttig zijn voor iemand.
In mijn geval had ik een foutmelding ‘Parseerfout: Syntaxisfout, onverwacht einde van bestand in mijn PHP-code op regel 665’
Het probleem was in mijn geval op lijn 45

    $html = <<<html
....
            html

In versie 7.2 moet de sluitingstag ZONDER spaties ervoor zijn

    $html = <<<html
....
html

Antwoord 16

In mijn geval was het een niet-gesloten functie.
Ik moest functies één voor één verwijderen en herstellen om te controleren welke de code beïnvloedt.

Ik hoop dat iemand er baat bij heeft


Antwoord 17

Als je parse_ini_file($file) gebruikt of een routine een .ini-bestand stuurt, controleer dan of je gegevens in het ini-bestand staan. Niet-geciteerde gegevens veroorzaken deze fout. Ex; data1=test veroorzaakt de fout, data1=”test” niet.


Antwoord 18

Ik heb een plug-in ontwikkeld en geïnstalleerd op een WordPress-site die draait op Nginx en het was prima. Ik had deze fout alleen toen ik overschakelde naar Apache, bleek dat de webserver de <? niet accepteerde, dus heb ik de <? tags vervangen door <?php toen werkte het.


Antwoord 19

Je kunt IF/ELSE-instructies niet in twee afzonderlijke blokken verdelen. Als u HTML-code wilt afdrukken, gebruikt u echo.

<html>
    <?php
        function login()
        {
            // Login function code
        }
        if (login())
        {
            echo "<h2>Welcome Administrator</h2>
            <a href=\"upload.php\">Upload Files</a>
            <br />
            <a href=\"points.php\">Edit Points Tally</a>";
        }
        else
        {
            echo "Incorrect login details. Please login";
        }
    ?>
    Some more HTML code
</html>

LEAVE A REPLY

Please enter your comment!
Please enter your name here

ten − 9 =

Other episodes