Très souvent, je vais essayer d'exécuter un script PHP et de récupérer un écran vide. Aucun message d'erreur; juste un écran vide. La cause peut être une simple erreur de syntaxe (parenthèse incorrecte, point-virgule manquant), ou un appel de fonction échoué, ou autre chose.
Il est très difficile de comprendre ce qui n'a pas fonctionné. Je finis par commenter le code, en saisissant des déclarations "echo" partout, etc. en essayant d'affiner le problème. Mais il doit sûrement y avoir un meilleur moyen, non?
Existe-t-il un moyen d'obtenir que PHP produise un message d'erreur utile, comme le fait Java?
php
debugging
error-handling
Candidasa
la source
la source
T_PAAMAYIM_NEKUDOTAYIM
. Ou peut-être "doit être une instance d'entier, entier donné" .Réponses:
Pour les erreurs de syntaxe, vous devez activer l'affichage des erreurs dans le php.ini. Par défaut, ceux-ci sont désactivés car vous ne voulez pas qu'un "client" voit les messages d'erreur. Consultez cette page dans la documentation PHP pour plus d'informations sur les 2 directives:
error_reporting
etdisplay_errors
.display_errors
est probablement celui que vous souhaitez changer. Si vous ne pouvez pas modifier le php.ini, vous pouvez également ajouter les lignes suivantes à un fichier .htaccess:Vous voudrez peut-être envisager d'utiliser la valeur de E_ALL (comme mentionné par Gumbo) pour votre version de PHP pour
error_reporting
obtenir toutes les erreurs. Plus d'informations3 autres éléments: (1) Vous pouvez vérifier le fichier journal des erreurs car il contiendra toutes les erreurs (sauf si la journalisation a été désactivée). (2) L'ajout des 2 lignes suivantes vous aidera à déboguer les erreurs qui ne sont pas des erreurs de syntaxe:
(3) Une autre option consiste à utiliser un éditeur qui vérifie les erreurs lors de la frappe , tel que PhpEd . PhpEd est également livré avec un débogueur qui peut fournir des informations plus détaillées. (Le débogueur PhpEd est très similaire à xdebug et s'intègre directement dans l'éditeur, donc vous utilisez 1 programme pour tout faire.)
Le lien de Cartman est également très bon: http://www.ibm.com/developerworks/library/os-debug/
la source
E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE
. Voir docs.php.net/manual/en/errorfunc.constants.phpLes éléments suivants permettent toutes les erreurs:
Voir également les liens suivants
la source
ini_set
est une chaîne.Le code suivant doit afficher toutes les erreurs:
La seule façon de générer une page vierge avec ce code est lorsque vous avez une erreur dans le gestionnaire d'arrêt. J'ai copié et collé cela à partir de mes propres cms sans le tester, mais je suis sûr que cela fonctionne.
la source
ShutdownHandler
ci-dessus. Fondamentalement, il s'agit d'un hack stopgap au lieu d'une gestion correcte des erreurs.E_NOTICE
erreurs dans cette fonction?Les erreurs et les avertissements apparaissent généralement dans
....\logs\php_error.log
ou en....\logs\apache_error.log
fonction de vos paramètres php.ini.Les erreurs utiles sont souvent dirigées vers le navigateur, mais comme elles ne sont pas valides en html, elles ne sont pas affichées.
Donc,
"tail -f
"vos fichiers journaux et lorsque vous obtenez un écran vide, utilisez les options du menu" affichage "->" source "d'IE pour afficher la sortie brute.la source
php_flag display_errors 1
.Vous pouvez inclure les lignes suivantes dans le fichier que vous souhaitez déboguer:
Cela remplace les paramètres par défaut dans php.ini, qui obligent simplement PHP à signaler les erreurs au journal.
la source
Configuration PHP
2 entrées dans php.ini dictent la sortie des erreurs:
display_errors
error_reporting
En production ,
display_errors
est généralement défini surOff
(ce qui est une bonne chose, car l'affichage d'erreur sur les sites de production n'est généralement pas souhaitable!).Cependant, en cours de développement , il doit être défini sur
On
, afin que les erreurs soient affichées. Vérifiez !error_reporting
(à partir de PHP 5.3) est défini par défaut surE_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
(ce qui signifie que tout est affiché à l'exception des avis, des normes strictes et des avis de dépréciation). En cas de doute, réglez-le surE_ALL
pour afficher toutes les erreurs. Vérifiez !Whoa whoa! Pas de chèque! Je ne peux pas changer mon php.ini!
C'est une honte. Habituellement, les hôtes partagés n'autorisent pas la modification de leur fichier php.ini, et donc, cette option n'est malheureusement pas disponible. Mais n'ayez crainte! Nous avons d' autres options !
Configuration d'exécution
Dans le script souhaité, nous pouvons modifier les entrées php.ini en runtime! Cela signifie que cela s'exécutera lorsque le script s'exécutera! Doux!
Ces deux lignes feront le même effet que la modification des entrées php.ini comme ci-dessus! Impressionnant!
Je reçois toujours une erreur de page blanche / 500!
Cela signifie que le script n'avait même pas été exécuté! Cela se produit généralement lorsque vous avez une erreur de syntaxe!
Avec des erreurs de syntaxe, le script ne parvient même pas à l'exécution. Il échoue au moment de la compilation , ce qui signifie qu'il utilisera les valeurs dans php.ini, qui si vous n'aviez pas changé, pourraient ne pas permettre l'affichage des erreurs.
Journaux d'erreurs
De plus, PHP par défaut enregistre les erreurs. Dans l'hébergement mutualisé, il peut être dans un dossier dédié ou sur le même dossier que le script incriminé.
Si vous avez accès à php.ini, vous pouvez le trouver sous l'
error_log
entrée.la source
Il existe une extension vraiment utile appelée " xdebug " qui rendra vos rapports beaucoup plus agréables.
la source
J'utilise toujours cette syntaxe tout en haut du script php.
la source
Pour un dépannage rapide et pratique, je suggère normalement ici sur SO:
à mettre au début du script en cours de dépannage. Ce n'est pas parfait, la variante parfaite est que vous activez également cela dans le
php.ini
et que vous enregistrez les erreurs en PHP pour intercepter les erreurs de syntaxe et de démarrage.Les paramètres décrits ici affichent toutes les erreurs, notifications et avertissements, y compris ceux stricts, quelle que soit la version de PHP.
Prochaines choses à considérer:
Voir aussi:
error_reporting()
Documentsdisplay_errors
Documentsla source
Il est possible d'enregistrer un hook pour rendre visible la dernière erreur ou avertissement.
l'ajout de ce code au début de votre index.php vous aidera à déboguer les problèmes.
la source
Il s'agit d'un problème de configuration chargée par rapport à la configuration d'exécution
Il est important de reconnaître qu'une erreur de syntaxe ou une erreur d'analyse se produit lors de l' étape de compilation ou d' analyse , ce qui signifie que PHP sera libéré avant même qu'il n'ait eu la chance d'exécuter l'un de vos codes. Donc, si vous modifiez la
display_errors
configuration de PHP pendant l'exécution (cela inclut tout, de l'utilisationini_set
de votre code à l'utilisation de .htaccess, qui est un fichier de configuration d'exécution), seuls les paramètres de configuration chargés par défaut sont en jeu.Comment toujours éviter WSOD en développement
Pour éviter un WSOD vous voulez vous assurer que votre fichier de configuration chargé a
display_errors
sur eterror_reporting
mis à-1
(c'est l'équivalent E_ALL car il assure tous les bits sont activés quelle que soit la version de PHP que vous utilisez ). Ne codez pas en dur la valeur constante de E_ALL, car cette valeur est susceptible de changer entre les différentes versions de PHP.La configuration chargée est votre
php.ini
fichier chargé ou votre fichierapache.conf
ouhttpd.conf
ou virtualhost. Ces fichiers ne sont lus qu'une seule fois lors de la phase de démarrage (lorsque vous démarrez pour la première fois apache httpd ou php-fpm, par exemple) et ne sont remplacés que par des modifications de configuration d'exécution. S'assurer quedisplay_errors = 1
eterror_reporting = -1
dans votre fichier de configuration chargé garantit que vous ne verrez jamais un WSOD, quelle que soit la syntaxe ou l'erreur d'analyse qui se produisent avant qu'un changement d'exécution commeini_set('display_errors', 1);
ouerror_reporting(E_ALL);
puisse avoir lieu.Comment trouver vos fichiers de configuration (php.ini) chargés
Pour localiser vos fichiers de configuration chargés, créez simplement un nouveau fichier PHP avec uniquement le code suivant ...
Ensuite, pointez votre navigateur et regardez le fichier de configuration chargé et les fichiers .ini supplémentaires analysés , qui sont généralement en haut de votre
phpinfo()
et incluront le chemin absolu vers tous vos fichiers de configuration chargés.Si vous voyez à la
(none)
place du fichier, cela signifie que vous n'avez pas de php.ini dans le chemin du fichier de configuration (php.ini) . Vous pouvez donc télécharger le stock php.ini fourni avec PHP à partir d'ici et le copier dans le chemin de votre fichier de configuration en tant que php.ini, puis assurez-vous que votre utilisateur php dispose des autorisations suffisantes pour lire à partir de ce fichier. Vous devrez redémarrer httpd ou php-fpm pour le charger. N'oubliez pas qu'il s'agit du fichier de développement php.ini fourni avec la source PHP. Alors ne l'utilisez pas en production!Ne fais pas ça en production
C'est vraiment le meilleur moyen d'éviter un WSOD en développement. Quiconque suggère que vous placez
ini_set('display_errors', 1);
ouerror_reporting(E_ALL);
en haut de votre script PHP ou utilisez .htaccess comme vous l'avez fait ici, ne vous aidera pas à éviter un WSOD lorsqu'une erreur de syntaxe ou d'analyse se produit (comme dans votre cas ici) si votre fichier de configuration chargé adisplay_errors
désactivé.Beaucoup de gens (et les installations en stock de PHP) utiliseront un fichier de production-ini
display_errors
désactivé par défaut, ce qui entraîne généralement la même frustration que vous avez vécue ici. Parce que PHP l'a déjà désactivé au démarrage, il rencontre une erreur de syntaxe ou d'analyse et échoue sans rien à afficher. Vous vous attendez à ce que votreini_set('display_errors',1);
en haut de votre script PHP ait évité cela, mais peu importe si PHP ne peut pas analyser votre code car il n'aura jamais atteint le runtime.la source
Si vous êtes super cool, vous pouvez essayer:
Cela n'affichera les erreurs que lorsque vous exécutez localement. Il vous donne également la variable test_server à utiliser dans d'autres endroits, le cas échéant.
Toutes les erreurs qui se produisent avant l'exécution du script ne seront pas détectées, mais pour 99% des erreurs que je fais, ce n'est pas un problème.
la source
$_SERVER['REMOTE_HOST']
pour vérifier si le client est bien vous.En haut de la page choisissez un paramètre
la source
Pour persister et le rendre confortable, vous pouvez éditer votre fichier php.ini. Il est généralement stocké dans
/etc/php.ini
ou/etc/php/php.ini
, mais les plus locauxphp.ini
peuvent le remplacer, selon les directives de configuration de votre hébergeur. Vérifiez unphpinfo()
fichierLoaded Configuration File
en haut pour vous assurer que celui-ci est chargé en dernier.Recherchez display_errors dans ce fichier. Il ne devrait y avoir que 3 instances, dont 2 sont commentées.
Remplacez la ligne non commentée par:
la source
Je ne sais pas si cela peut aider, mais voici un morceau de mon fichier de configuration standard pour les projets php. J'ai tendance à ne pas trop dépendre des configs apache même sur mon propre serveur.
Je n'ai jamais le problème d'erreur qui disparaît, alors peut-être que quelque chose ici vous donnera une idée.
Modifié pour afficher APPLICATON_LIVE
la source
De plus, vous pouvez obtenir des informations plus détaillées avec xdebug .
la source
Je recommande Nette Tracy pour une meilleure visualisation des erreurs et exceptions en PHP:
la source
la source
Et activez les erreurs d'affichage dans php.ini
la source
Vous pouvez enregistrer votre propre gestionnaire d'erreurs en PHP. Le vidage de toutes les erreurs dans un fichier peut vous aider dans ces cas obscurs, par exemple. Notez que votre fonction sera appelée, quel que soit le paramètre error_reporting actuel . Exemple très basique:
la source
Les deux lignes clés dont vous avez besoin pour obtenir des erreurs utiles de PHP sont:
Comme l'ont souligné d'autres contributeurs, ceux-ci sont désactivés par défaut pour des raisons de sécurité. Comme conseil utile - lorsque vous configurez votre site, il est pratique de commuter pour vos différents environnements afin que ces erreurs soient activées par défaut dans vos environnements local et de développement. Cela peut être réalisé avec le code suivant (idéalement dans votre fichier index.php ou config donc c'est actif depuis le début):
la source
FirePHP peut également être utile.
la source
ouvrez votre php.ini, assurez-vous qu'il est réglé sur:
redémarrez votre serveur.
la source
Vous pouvez également essayer PHPStorm comme éditeur de code. Il trouvera de nombreuses erreurs PHP et autres erreurs de syntaxe au fur et à mesure que vous tapez dans l'éditeur.
la source
si vous êtes un utilisateur ubuntu, accédez à votre terminal et exécutez cette commande
où il affichera les 50 dernières erreurs. Il existe un fichier d'erreur
error.log
pour apache2 qui enregistre toutes les erreurs.la source
Pour activer le rapport d'erreur complet, ajoutez ceci à votre script:
Cela provoque des avertissements, même minimes. Et, juste au cas où:
Force l'affichage des erreurs. Cela doit être désactivé sur les serveurs de production, mais pas lorsque vous développez.
la source
Les «ERREURS» sont les choses les plus utiles pour que les développeurs connaissent leurs erreurs et les résolvent pour que le système fonctionne parfaitement.
PHP fournit de meilleures façons de connaître les développeurs pourquoi et où leur morceau de code obtient les erreurs, donc en connaissant ces erreurs, les développeurs peuvent améliorer leur code de plusieurs façons.
Meilleures façons d'écrire les deux lignes suivantes en haut du script pour obtenir tous les messages d'erreur:
Une autre façon d'utiliser des outils de débogage comme xdebug dans votre IDE.
la source
Vous pouvez activer le rapport d'erreur complet (y compris les notifications et les messages stricts). Certaines personnes trouvent cela trop verbeux, mais cela vaut la peine d'essayer. Réglez
error_reporting
surE_ALL | E_STRICT
dans votre php.ini.E_STRICT
vous informera des fonctions obsolètes et vous donnera des recommandations sur les meilleures méthodes pour effectuer certaines tâches.Si vous ne voulez pas d'avis, mais que vous trouvez d'autres types de messages utiles, essayez d'exclure les avis:
Assurez-vous également que cette
display_errors
option est activée dans php.ini. Si votre version PHP est antérieure à 5.2.4, définissez-la surOn
:Si votre version est 5.2.4 ou plus récente, utilisez:
la source
Mis à part error_reporting et le paramètre display_errors ini, vous pouvez obtenir des erreurs SYNTAX à partir des fichiers journaux de votre serveur Web. Lorsque je développe PHP, je charge les journaux du serveur Web de mon système de développement dans mon éditeur. Chaque fois que je teste une page et que j'obtiens un écran vide, le fichier journal devient périmé et mon éditeur me demande si je veux la recharger. Quand je le fais, je saute au bas et il y a l'erreur de syntaxe. Par exemple:
la source
Pour ceux qui utilisent nginx et ont un écran blanc même pour les fichiers avec
<?php echo 123;
. Dans mon cas, je n'avais pas cette option requise pour PHP dans le fichier de configuration nginx:Cette option n'était pas dans le fichier fastcgi_params, donc PHP ne fonctionnait pas et il n'y avait aucune erreur dans les journaux.
la source