web-dev-qa-db-fra.com

Erreur d'analyse: erreur de syntaxe, fin de fichier inattendue dans mon PHP code

J'ai une erreur:

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

Avec ce 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>

Quel est le problème?

142
pratnala

Vous devriez éviter ceci (à la fin de votre code):

{?>

et ça:

<?php}

Vous ne devez pas mettre les crochets directement à côté de la balise php d'ouverture/fermeture, mais séparez-les par un espace:

{ ?>
<?php {

évitez également <? et utilisez <?php

271
j0k

J'ai eu la même erreur, mais je l'ai fait réparer en modifiant le fichier php.ini.

Trouvez votre fichier php.ini voir Mec, où est mon php.ini?

puis ouvrez-le avec votre éditeur préféré.

Recherchez une propriété short_open_tag et appliquez la modification suivante:

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

Il suffit d'aller dans le fichier php.ini, puis de trouver short_open_tag= Off défini sur short_open_tag= On

9
Hamzah Akram

Vérifiez que vous avez fermé votre classe.

Par exemple, si vous avez une classe de contrôleur avec des méthodes et que vous supprimez accidentellement le dernier crochet, qui ferme toute la classe, vous obtiendrez cette erreur.

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

Recherchez les boucles ou les déclarations qui ne sont pas fermées.

J'avais rencontré ce problème lorsque j'ai quitté un php foreach: tag unclosed.

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

La fermeture en utilisant ce qui suit a résolu l'erreur de syntaxe: unexpected end of file

<?php endforeach; ?>

J'espère que ça aide quelqu'un

3
Imtiaz

Evitez également ceci <? } ?> assurez-vous de mettre <?php } ?>

2
Gpak

J'ai vu des erreurs que j'ai corrigées ci-dessous.

Voici ce que j'ai comme étant erroné:

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";
}

Voici comment je l'aurais fait:

<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>
2
ryanc1256

Dans mon cas, le coupable était la seule balise <?php d'ouverture de la dernière ligne du fichier. Apparemment, cela fonctionne sur certaines configurations sans aucun problème, mais pose des problèmes sur d'autres.

1
J. Wrong

Si vous utilisez parse_ini_file ($ file) ou une routine en exécutant un fichier .ini, vérifiez si vos données sont citées dans le fichier ini. Les données non citées provoqueront cette erreur. Ex; data1 = test causera l'erreur, data1 = "test" ne le fera pas.

0
Wynn

Vous ne pouvez pas diviser les instructions IF/ELSE en deux blocs distincts. Si vous souhaitez imprimer du code HTML, utilisez 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>
0
TK-421

Aussi, un autre cas où il est difficile à repérer, c'est quand vous avez un fichier avec juste une fonction, je sais que ce n'est pas un cas d'utilisation courant mais c'est ennuyeux et il fallait repérer l'erreur.

<?php
function () {

}

Le fichier ci-dessus renvoie le erro Parse error: syntax error, unexpected end of file in, contrairement au fichier ci-dessous.

<?php
function () {

};
0
neisantos