Parse error: syntax error, unexpected $end

Dernière mise à jour le 13 novembre 2009 à 16:59 par marlalapocket
Publié par kilian
Lorsque l'on programme en Php, on se retrouve inévitablement un jour devant ce genre d'erreur:
Parse error: syntax error, unexpected $end in Command line code on line 1

En français, ça signifie grossièrement: "Erreur d'analyse du code: il y a une erreur de syntaxe, fin de code inattendue".



Qu'est-ce qui provoque cette erreur?


En fait, cette erreur signifie que Php a fini d'analyser votre code, mais que vous avez oublié de fermer un symbole quelque part dans votre page ou dans celles qui ont été incluses.
Concrètement cela arrive quand:
  • Vous avez par exemple oublié de fermer un guillemet, donc Php continue d'analyser votre code jusqu'à ce qu'il trouve le guillemet fermant, qu'il ne trouve pas...
  • Vous avez oublié de fermer une accolade, donc à partir de la dernière accolade ouvrante, Php considère tout le code qui suit comme faisant partie d'un bloc qui ne se termine jamais...
  • Vous avez oublié de fermer une parenthèse, donc à partir de la dernière parenthèse ouvrante, Php considère tout le code qui suit comme faisant partie d'un même bloc spécifique (condition, arguments de fonctions etc...) qui ne se termine pas.
  • Vous avez oublié un point virgule, donc pour Php, il y a une instruction dans votre code qui ne possède pas de fin.


Par conséquent, inutile de se référer à la ligne signalée par Php comme étant l'origine de l'erreur. Php vous dira que le problème vient de la dernière ligne, alors que l'origine peut être située un peu n'importe où dans la page concernée ou dans les pages qui y sont incluses.

Exemples de codes qui provoquent cette erreur


Voici quelques exemples de codes qui sont susceptibles de provoquer cette erreur.

Oubli de l'accolade fermante:
<?
if ($condition){
     echo "vrai";
?>

Oubli de fermer un guillemet:
<?
echo "test;
?>

Oubli de fermer une parenthèse:
<?
mysql_query("gnagnagna", "pouet", "cecinestpasunserveursql.com" ;
?>

Oubli d'un point virgule:
<?
if ($test){
    echo '1'
}
?>

Comment corriger / éviter cette erreur


Ceci vient bien souvent du fait que l'on organise mal la présentation de son code. Surtout pensez à bien indenter votre code, à bien distinguer visuellement les différents blocs.

Exemple d'un code propre:
//Equivalent de array_reverse()
function inverse_tableau($tableau)
{
    $ret = array();
    if (is_array($tableau) ){
        for($i=sizeof($tableau) - 1; $i >= 0; $i++)
        {
            $ret[] = $tableau[$i];
        }
    }
    return $ret;
}

Exemple d'un code non indenté, plus difficile à débugger:
function inverse_tableau($tableau)
{
$ret = array();
if (is_array($tableau) ){
for($i=sizeof($tableau) - 1; $i >= 0; $i++)
{
$ret[] = $tableau[$i];
}
}
return $ret;
}

Si vous rencontrez cette erreur, sachez qu'elle ne se situe pas nécessairement à la fin de votre code, par exemple l'oubli d'une accolade peut se situer tout au début de votre code, même si votre fichier fait 1000 lignes.

Bon courage!
Meilleures réponses pour « Parse error: syntax error, unexpected $end » dans :
PHP Parse error: unexpected '&lt;' in ... eval()'d code on l VoirSymptômes Lors de l'utilisation de la fonction eval() en PHP, ce dernier se plaint et vous affiche un message de la forme suivante : PHP Parse error: syntax error, unexpected '
[PHP] Parse error, unexpected T_STRING, expecting ',' or ';' VoirCette erreur, fréquente, se produit notamment lorsqu'un guillemet est présent dans une chaîne délimitée par ce même type de guillemets, par exemple :