PHP 5.3 - Dépannage 500 Erreurs de Débogage - Erreurs d'analyse
De temps en temps je vais avoir quelque mal formé code PHP et j'obtiens une erreur 500. Je suis en cours d'exécution d'Apache 2.2 sur un Windows 7 ordinateur portable. IDE j'ai commencé à utiliser PhpStorm.
Quel est le meilleur moyen de détecter ces erreurs et d'être informé du numéro de ligne?
Pourquoi faire de la programmation orientée objet liés à des erreurs de syntaxe ont tendance à jeter des 500 erreurs et les problèmes de la fonction ont tendance à revenir normal des erreurs?
Exemple de syntaxe erreur: l'appel d'une méthode statique d'une classe avec une seule virgule au lieu de deux points.
Mise à JOUR:
Consultez accepté de répondre et de tous les commentaires.
- Je ne suis pas sûr de ce que vous entendez par "normal" erreurs? Si le code ne parvient pas à analyser en raison d'une erreur de syntaxe alors je m'attends à une 500 de du serveur web avec compilation détails de l'erreur dans les logs (pas dans l'écran de l'utilisateur).
Vous devez vous connecter pour publier un commentaire.
PHP répondra avec "500" lorsqu'il rencontre une erreur Fatale, comme
E_PARSE
,E_ERROR
et les exceptions non traitées. 500 est le code de réponse HTTP pour "Erreur Interne du Serveur" - quelque chose d'irrécupérable s'est produite lors du traitement de la demande.Dans votre php.ini, sur une machine de développement, vous devez définir votre
error_reporting
niveau de (au moins)E_NOTICE
- de préférenceE_ALL
- et assurez-vous quedisplay_errors
est sur. Cela va vous montrer le message d'erreur dans le navigateur, y compris pour les "500" les erreurs.Vous pouvez également vérifier votre Apache journaux d'erreurs, les erreurs seront listées là, aussi longtemps que
log_errors
est activé dans php.ini. Par défaut, ce sera à<apache_ServerRoot>\logs\error.log
.Vous pouvez également contrôler tout cela au moment de l'exécution avec
ini_set()
eterror_reporting()
error_reporting
sur, les chances sontdisplay_errors
est éteint. Il y a des situations dans lesquelles le message d'erreur ne sera pas sortie, mais ce n'est vraiment si quelque chose se passait très mal avec PHP en interne et il s'est écrasé. Lorsque cela se produit, généralement il y a un message dans les logs Apache qui vous dit que c'est arrivé, bien que le débogage pourquoi il est passé peut être très difficile, en effet. Dans cette situation, l'exécution du script à partir de la ligne de commande parfois permet d'obtenir une message d'erreur, mais pas toujours.E_PARSE
des erreurs, vous pouvez charger le script à partir de la ligne de commande avec la-l
(lint) option et il vous donne le message d'erreur vous indiquant le numéro de la ligne où l'erreur d'analyse s'est produite.ini_set()
ne fait aucune différence. La seule exception à cette règle est si vousinclude()
un fichier qui n'a pas d'analyser, dans ce cas le code avant l'appel àinclude
auraient été exécutées. C'est (à ma connaissance) le seul type d'erreur run-time pour lesquelles cela est vrai. Mais dans un environnement de dev, vous devez toujours montrer toutes les erreurs de toute façon, de sorte que vous pouvez les attraper et de les corriger, de sorte que sa mise en php.ini est le meilleur moyen 🙂