Parse error: syntax error, unexpected $end

Décembre 2016

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!

A voir également :

Ce document intitulé «  Parse error: syntax error, unexpected $end  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.