Erreurs d'analyse/syntaxe PHP ; et comment les résoudre
P粉633075725
2023-08-23 16:16:57
<p>Tout le monde est confronté à des erreurs de grammaire. Même les programmeurs expérimentés font des erreurs. Pour les nouveaux arrivants, cela ne constitue qu’une partie du processus d’apprentissage. Cependant, les messages d'erreur sont généralement faciles à interpréter, par exemple : </p>
<blockquote>
<p>Erreur d'analyse PHP : erreur de syntaxe, '{' inattendu dans la ligne 20 d'index.php</p>
</blockquote>
<p>Les symboles inattendus ne sont pas toujours les véritables coupables. Mais le numéro de ligne donne une idée approximative de l'endroit où commencer la recherche. </p>
<blockquote>
<p>Toujours consulter le contexte du code <strong></strong>. Les erreurs de syntaxe sont souvent masquées dans <em> ou </em> mentionné dans <strong>la ligne de code précédente</strong>. Comparez votre code aux exemples de syntaxe du manuel. </p>
</blockquote>
<p>Bien que tous les cas ne se correspondent pas. Toutefois, il existe quelques étapes générales pour <strong>résoudre les erreurs de syntaxe</strong>.Cette référence résume les pièges courants : </p>
<ul>
<li><p>T_STRINGinattendu</p>
≪/li>
<li><p>T_VARIABLE inattendu </p><p> '$varname' (T_VARIABLE)</p>
≪/li>
<li><p>Inattendu T_CONSTANT_ENCAPSED_STRING </p><p>Inattendu T_ENCAPSED_AND_WHITESPACE</p>
≪/li>
<li><p>Inattendu $end</p>
≪/li>
<li><p>T_FUNCTION inattendue...</p>
≪/li>
<li><p>Inattendu<code>{</code></p><p>Inattendu<code>}</code></p><p> (</code></p><p>Inattendu<code>)</code></p>
≪/li>
<li><p>Inattendu<code>[</code></p><p>Inattendu<code>]</code></p>
≪/li>
<li><p>T_IF inattendu </p><p> T_FOREACH inattendu </p><p> p> T_DO inattendu </p><p> T_PRINT inattendu </p><p>
≪/li>
<li><p>T_LNUMBER inattendu</p>
≪/li>
<li><p>Accident ?</p>
≪/li>
<li><p>Suite inattendue (T_CONTINUE)</p><p>Suite inattendue (T_BREAK)</p><p>Suite inattendue (T_RETURN)</p>
≪/li>
<li><p>Inattendu "="</p>
≪/li>
<li><p>Inattendu T_INLINE_HTML…</p>
≪/li>
<li><p>Inattendu T_THIS_IS_THE_THING...</p>
≪/li>
<li><p>T_OBJECT_OPERATOR inattendu...</p>
≪/li>
<li><p>T_DOUBLE_ARROW inattendu...</p>
≪/li>
<li><p>T_SL inattendu...</p>
≪/li>
<li><p>T_BOOLEAN_OR inattendu…
</p><p>
T_BOOLEAN_AND inattendu…</p>
≪/li>
<li><p>T_IS_EQUAL inattendu </p><p>
T_IS_GREATER_OR_EQUAL </p><p>
T_IS_IDENTICAL </p><p>
T_IS_NOT_EQUAL </p><p>
T_IS_NOT_IDENTICAL </p><p>
T_IS_SMALLER_OR_EQUAL </p><p>
<code><</code>
<code>></code></p>
≪/li>
<li><p>T_NS_SEPARATOR inattendu...</p>
≪/li>
<li><p>Caractères inattendus dans l'entrée : '<code></code>' (ASCII=92) state=1</p>
≪/li>
<li><p>Inattendu 'Public' (T_PUBLIC) </p><p>Inattendu 'Privé' (T_PRIVATE) </p><p>Inattendu 'Protégé' (T_PROTECTED) ) < /p><p> 'T_FINAL' inattendu...</p>
≪/li>
<li><p>T_STATIC inattendu...</p>
≪/li>
<li><p>T_CLASS inattendu…</p>
≪/li>
<li><p> 'Utilisation' inattendue (T_USE)</p>
≪/li>
<li><p>T_DNUMBER inattendu</p>
≪/li>
<li><p>Inattendu <code>,</code> <em>(virgule)</em></p>
≪/li>
<li><p>Inattendu<code>.</code> <em>(période)</em></p>
≪/li>
<li><p>Inattendu <code>;</code> <em>(point-virgule)</em></p>
≪/li>
<li><p>Inattendu<code>*</code><em>
≪/li>
<li><p>Inattendu<code> : </code><em>
≪/li>
<li><p> ':' inattendu, ',' ou ')' attendus</p>
≪/li>
<li><p>Inattendu<code>&</code> (passé par référence lors de l'appel)</p>
≪/li>
<li><p>Inattendu<code>. </code></p>
≪/li>
</ul>
<p>Références associées :</p>
<ul>
<li>Que signifie cette erreur en PHP ? (erreur d'exécution)
<ul>
<li>Erreur d'analyse : erreur de syntaxe, T_XXX</li>
<li>Erreur d'analyse : erreur de syntaxe, T_ENCAPSED_AND_WHITESPACE</li>
<li>Erreur d'analyse : erreur de syntaxe, T_VARIABLE</li>
</ul>
≪/li>
<li>Que signifie ce symbole en PHP ? (balise de langue)</li>
<li>Ces<code>""</code>smart<code>''</code>les guillemets ne signifient rien pour PHP</li>
</ul>
<p>Aussi :</p>
<ul>
<li>Manuel PHP et ses différentes balises de langue sur php.net</li>
<li>Ou l’introduction à la syntaxe de PHP de Wikipédia. ≪/li>
<li>Enfin, bien sûr, notre wiki de balises <strong>php</strong> ≪/li>
</ul>
<p>Bien que Stack Overflow accueille les programmeurs débutants, il est principalement destiné aux questions de programmation professionnelle. </p>
<ul>
<li>Répondez aux erreurs de codage et aux fautes d'orthographe de chacun qui sont pour la plupart considérées comme hors sujet. ≪/li>
<li>Donc, avant de publier une demande de correction de syntaxe, veuillez prendre le temps de suivre les étapes de base. ≪/li>
<li>Si vous devez néanmoins procéder ainsi, montrez votre propre solution, votre tentative de résolution et votre processus de réflexion sur ce qui semble être une erreur ou ce qui pourrait l'être.≪/li>
</ul>
<p>Si votre <em>Browser</em> affiche un message d'erreur tel que « SyntaxError : caractère illégal », alors il ne s'agit pas réellement d'une erreur de syntaxe PHP, mais d'une erreur de syntaxe Javascript. </p>
<heure />
<p><strong>Erreurs de syntaxe générées par le code du fournisseur :</strong>Enfin, considérez que si l'erreur de syntaxe n'est pas générée par la modification de la base de code, mais est générée après l'installation ou la mise à niveau d'un package de fournisseur externe , il peut s'agir d'une incompatibilité due à la version de PHP, alors vérifiez les exigences du fournisseur par rapport aux paramètres de votre plate-forme. </p>
Je pense que ce sujet est complètement trop discuté/trop compliqué. Utiliser un IDE est un moyen d’éviter complètement toute erreur de syntaxe. Je dirais même que travailler sans IDE n'est pas professionnel. Pourquoi? Parce que les IDE modernes vérifient votre syntaxe après chaque caractère que vous tapez. Lorsque vous codez et que la ligne entière devient rouge et qu'une grande notification d'avertissement indique le type exact et l'emplacement exact de l'erreur de syntaxe, il n'est absolument pas nécessaire de rechercher d'autres solutions.
Utiliser un IDE de vérification de syntaxe signifie :
Vous ne rencontrerez (en fait) plus jamais d'erreurs de grammaire car vous les verrez correctement au fur et à mesure que vous tapez. honnêtement.
Excellents IDE avec vérification de la syntaxe (tous disponibles pour Linux, Windows et Mac) :
Qu'est-ce qu'une erreur grammaticale ?
PHP appartient aux langages de programmation C style et Imperative. Il comporte des règles de syntaxe strictes qui ne peuvent pas être récupérées lorsqu'un symbole ou un identifiant égaré est rencontré. Il ne peut pas deviner vos intentions de codage.
Le conseil le plus important
Il y a quelques précautions de base que vous pouvez toujours prendre :
Utilisez une indentation de code appropriée ou adoptez n'importe quel style de codage avancé. La lisibilité évite les irrégularités.
Utilisez IDEou un éditeur pour PHP avec surbrillance de la syntaxe. Cela aide également à l’équilibre entre supports et supports.
Lisez la Référence linguistique et les exemples dans le manuel. Après deux fois, vous devenez compétent.
Comment interpréter les erreurs de l'analyseur
Un message d'erreur de syntaxe typique est le suivant :
Il répertorie éventuelles erreurs grammaticales. Veuillez consulter le nom du fichier et le numéro de ligne mentionnés.
Un
Il est également important deT_STRING
nom comme explique le traitement final des symboles qui ne peuvent pas être analysés par l'analyseur/tagger. Cependant, ce n’est pas nécessairement la cause de l’erreur de syntaxe.regarder les lignes de code précédentes. Souvent, les erreurs de syntaxe ne sont que des accidents survenus auparavant. Le numéro de ligne d’erreur est exactement l’endroit où l’analyseur abandonne finalement tout traiter.
Corriger les erreurs grammaticales
Il existe de nombreuses façons de réduire et de résoudre les problèmes de grammaire.
Ouvrez le fichier source mentionné. Consultez la ligne de code mentionnée.
Avec des cordes emballées et des opérateurs égarés, c'est généralement là que l'on trouve le coupable.
Lisez la ligne de gauche à droite et imaginez ce que fait chaque symbole.
Vous devez également vérifier les lignes précédentes plus souvent.
Plus précisément, le
;
point-virgule est manquant à la fin/à l'instruction de la ligne précédente. (Au moins du point de vue du style.)Si
{
代码块}
n'est pas fermé ou imbriqué correctement, vous devrez peut-être enquêter davantage sur le code source. Utilisez une indentation de code appropriée pour simplifier.Découvrez Coloriage grammaire !
Les chaînes, variables et constantes doivent toutes avoir des couleurs différentes.
opérateurs
+-*/.
devraient également être colorés différemment. Sinon, ils pourraient se trouver dans le mauvais environnement.Si vous trouvez que la coloration de votre chaîne s'étend trop loin ou trop courte, vous avez découvert une fin non échappée ou manquante
"
或'
marqueur de chaîne.Deux signes de ponctuation adjacents de la même couleur peuvent également signifier des problèmes. Normalement, un opérateur est seul s'il n'est pas suivi de
++
、--
ou d'une parenthèse. Dans la plupart des cas, deux chaînes/identifiants directement connectés sont incorrects.L'espace vide est votre ami. Suivez n’importe quelstyle de codage.
Brisez temporairement la longue file d'attente.
Vous pouvez librement ajouter des nouvelles lignes entre des opérateurs ou des constantes et des chaînes. L'analyseur externalisera alors le numéro de ligne qui a analysé l'erreur. Au lieu de regarder du code très détaillé, vous pouvez isoler les symboles de syntaxe manquants ou mal placés.
Convertir des conditions
if
语句拆分为不同的或嵌套的if
complexes.Au lieu d'utiliser de longues formules mathématiques ou des chaînes logiques, utilisez des variables temporaires pour simplifier votre code. (Plus lisible = moins d'erreurs.)
Ajouter des sauts de ligne entre :
Partitionner de longs blocs de code aide vraiment à localiser la source des erreurs de syntaxe.
Commentezle code incriminé.
Si vous ne parvenez pas à isoler la source du problème, commencez à commenter (supprimant ainsi temporairement) des blocs de code.
Une fois que vous avez résolu l'erreur d'analyse, vous avez trouvé la source du problème. Regardez-y de plus près.
Parfois, vous souhaitez supprimer temporairement un bloc de fonction/méthode complet. (En cas d'accolades incompatibles et de code mal indenté.)
Lorsque vous n'arrivez pas à résoudre un problème de grammaire, essayez de repartir de zéro réécrireles parties commentées.
En tant que débutant, évitez certaines structures grammaticales déroutantes.
Déclaration
Tternaire
? :
条件运算符可以压缩代码并且确实很有用。但它并不能在所有情况下提高可读性。在不熟悉的情况下更喜欢简单的if
.Syntaxe alternative pour PHP (
if:
/elseif:
/endif;
) 对于模板来说很常见,但可以说不太容易遵循正常的{
代码}
blocs.Les erreurs les plus courantes commises par les débutants sont :
Point-virgule manquant
;
pour terminer l'instruction/la ligne."
或'
ne correspondent pas et les guillemets ne sont pas échappés.Opérateurs oubliés, notamment la concaténation des chaînes
.
.Déséquilibré
(
括号)
. Comptez-les dans les lignes signalées. Leurs quantités sont-elles égales ?N’oubliez pas que la résolution d’un problème de grammaire peut révéler le suivant.
Si vous résolvez un problème mais que quelque chose d'autre apparaît dans un code ci-dessous, vous êtes fondamentalement sur la bonne voie.
Si de nouvelles erreurs de syntaxe apparaissent dans la même ligne après la modification, vos tentatives de modification risquent d'échouer. (Mais pas toujours.)
Si vous ne parvenez pas à le réparer, restaurez une sauvegarde de votre code de travail précédent.
差异
. Cela pourrait aider à comprendre quel est le problème de syntaxe.Caractères Unicode parasites invisibles : Dans certains cas, vous devez utiliser un éditeur hexadécimal ou un autre éditeur/visualiseur sur le code source. Certains problèmes ne peuvent pas être détectés simplement en regardant le code.
Essayez
grep --color -P -n "[x80-xFF]" file.php
comme première mesure pour trouver des symboles non-ASCII.En particulier, les nomenclatures, les espaces de largeur nulle ou les espaces insécables et les guillemets intelligents apparaissent souvent dans le code source.
Faites attention au type de nouvelles lignes enregistré dans le fichier.
PHP ne prend en charge que le caractère de saut de ligne n et ne prend pas en charge le caractère de retour chariot r.
Cela peut parfois poser problème pour les utilisateurs de MacOS (même sous OS X si l'éditeur est mal configuré).
Habituellement utilisé uniquement lors de l'utilisation de lignes simples.
//
或#
注释时才会出现问题。当忽略换行符时,多行/*...*/
Les commentaires interfèrent rarement avec l'analyseur.Si votre erreur de grammaire n'est pas transmise sur le réseau : Il se trouve que vous avez une erreur de syntaxe sur votre machine. Mais la mise en ligne du même fichier ne le montre plus. Cela ne peut signifier qu'une des deux choses suivantes :
Vous consultez le mauvais fichier !
Ou votre code contient de l'Unicode parasite invisible (voir ci-dessus). Vous pouvez le découvrir facilement : copiez simplement le code du formulaire Web dans votre éditeur de texte.
Vérifiez votre version PHP. Toutes les constructions de syntaxe ne sont pas disponibles sur tous les serveurs.
php -v
pour l'interpréteur de ligne de commandePour les appels via un serveur web.
Ce ne sont pas forcément les mêmes. Surtout lorsque vous utilisez des cadres, vous devez les faire correspondre.
N'utilisez pas de Mots-clés réservés PHP comme fonction/méthode, identifiants de classe ou constantes.
Les essais et erreurs sont un dernier recours.
Si tout le reste échoue, vous pouvez toujours googlevotre message d'erreur. Les symboles de syntaxe sont moins faciles à rechercher (bien que Stack Overflow lui-même soit indexé via SymbolHound). Par conséquent, vous devrez peut-être parcourir quelques pages supplémentaires pour trouver du contenu pertinent.
Plus de guides :
Écran blanc de la mort
Si votre site Web est tout simplement vide, cela est généralement dû à des erreurs grammaticales. Activer son affichage :
error_reporting = E_ALL
display_errors = 1
Dans votre
php.ini
php.ini
一般来说,或者通过 mod_php 的.htaccess
D'une manière générale, ou via le.htaccess
, Même.user.ini
en utilisant les paramètres FastCGI.Il est trop tard pour l'activer dans un script défectueux car PHP ne peut même pas interpréter/exécuter la première ligne. Une solution rapide consiste à créer un script wrapper comme
test.php
:Le code défaillant est ensuite appelé en accédant à ce script wrapper.
Cela aide également à activer PHP
error_log
并查看您的网络服务器的error.log
lorsque le script plante avec une réponse HTTP 500.