Comment obtenir des messages d'erreur utiles en PHP?


583

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?




4
@JuannStrauss, c'est sous-estimer. Et quand vous voyez enfin les erreurs, ça dit T_PAAMAYIM_NEKUDOTAYIM. Ou peut-être "doit être une instance d'entier, entier donné" .
Pacerier

1
Tutoriel à ce sujet: code2real.blogspot.com/2015/06/…
Élève

Réponses:


498

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_reportinget display_errors. display_errorsest 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:

php_flag  display_errors        on
php_value error_reporting       2039

Vous voudrez peut-être envisager d'utiliser la valeur de E_ALL (comme mentionné par Gumbo) pour votre version de PHP pour error_reportingobtenir toutes les erreurs. Plus d'informations

3 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:

error_reporting(-1);
ini_set('display_errors', 'On');

(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/


25
2039 est la valeur de 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.php
Gumbo

J'aime l'option du fichier .htaccess. Cela m'aide à déboguer dans une zone qui ne fait pas partie du site Web public. Merci beaucoup pour cette astuce!
jacekn

1
J'ajouterais que la journalisation des erreurs dans un fichier (et leur recherche là-haut) est la meilleure solution. Ne comptez pas sur l'affichage des erreurs sur la page - elles peuvent le ruiner, vous pouvez oublier d'activer le rapport d'erreurs pour le site de production et cela vous causera des problèmes à l'avenir
Ivan Yarych

455

Les éléments suivants permettent toutes les erreurs:

ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);

Voir également les liens suivants


28
Il est préférable d'effectuer ces modifications au niveau du fichier .ini. Activer le rapport d'erreurs à partir d'un script est inutile, car cela n'aidera pas avec les erreurs de syntaxe ou autres erreurs fatales qui tuent la phase de compilation. Le script est tué bien avant qu'il ne commence à s'exécuter et n'atteigne les remplacements de rapports.
Marc B

Vous avez tout à fait raison. Je n'ai pas remarqué que le déménagement se fait sur votre propre serveur.
Eljakim

6
Exécutez phpinfo () pour trouver le fichier php.ini correct. Recherchez la ligne du fichier de configuration chargé .
borrible

1
Si vous recherchez des erreurs qui se produisent pendant la phase de compilation, vérifiez vos journaux apache souvent situés dans /var/log/apache2/error.log
csi

1
Cette réponse échouera sur php7 lorsque la saisie stricte est activée, car le deuxième paramètre de ini_setest une chaîne.
PeeHaa

175

Le code suivant doit afficher toutes les erreurs:

<?php

// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);

// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);

// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
    if(@is_array($error = @error_get_last()))
    {
        return(@call_user_func_array('ErrorHandler', $error));
    };

    return(TRUE);
};

register_shutdown_function('ShutdownHandler');

// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
    $_ERRORS = Array(
        0x0001 => 'E_ERROR',
        0x0002 => 'E_WARNING',
        0x0004 => 'E_PARSE',
        0x0008 => 'E_NOTICE',
        0x0010 => 'E_CORE_ERROR',
        0x0020 => 'E_CORE_WARNING',
        0x0040 => 'E_COMPILE_ERROR',
        0x0080 => 'E_COMPILE_WARNING',
        0x0100 => 'E_USER_ERROR',
        0x0200 => 'E_USER_WARNING',
        0x0400 => 'E_USER_NOTICE',
        0x0800 => 'E_STRICT',
        0x1000 => 'E_RECOVERABLE_ERROR',
        0x2000 => 'E_DEPRECATED',
        0x4000 => 'E_USER_DEPRECATED'
    );

    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
    {
        $name = 'E_UNKNOWN';
    };

    return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));
};

$old_error_handler = set_error_handler("ErrorHandler");

// other php code

?>

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.


4
J'obtiens une page vierge de ce code. Qu'entendez-vous par «vous avez une erreur dans le gestionnaire d'arrêt» et que dois-je faire pour résoudre le problème?
Paolo M,

@PaoloM, Il dit une erreur dans la fonction ShutdownHandlerci-dessus. Fondamentalement, il s'agit d'un hack stopgap au lieu d'une gestion correcte des erreurs.
Pacerier

Merci, c'était utile, mais comment puis-je désactiver les E_NOTICEerreurs dans cette fonction?
MajAfy

C'est la bonne solution, mais soyez prudent avec la divulgation d'informations lorsque l'erreur se produit ... (préférez la journalisation plutôt que l'écho aux utilisateurs)
Sam Jason Braddock

1
J'utilise ceci lorsque le Symfony ne peut pas détecter correctement les erreurs fatales.
COil

61

Les erreurs et les avertissements apparaissent généralement dans ....\logs\php_error.logou en ....\logs\apache_error.logfonction 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.


13
Malheureusement, la source de la page d'affichage n'affiche rien non plus.
Matthew Scharley

2
Les erreurs d'analyse doivent être visibles dans le journal des erreurs d'Apache, quel que soit le paramètre que vous avez ailleurs. Si vous ne contrôlez pas le serveur, il peut être difficile d'obtenir le journal des erreurs Apache, mais je vous suggère de parler avec votre fournisseur et il existe des moyens de vous exposer le journal des erreurs. Autre que cela, je ne peux que suggérer ce que les autres ont - vérifiez votre code pour les erreurs d'analyse dans votre serveur de développement local avant de déployer en production. De plus, un IDE de validation tel que le PDT d'Eclipse pourrait être d'une grande aide.
Guss

5
Pour en revenir à cela, j'ai récemment eu un problème de débordement de pile qui ne générait aucune erreur, même dans les journaux et ne s'est pas manifesté en tant que tel jusqu'à ce que j'installe xdebug sur le serveur. Gah.
Matthew Scharley

Si vous ne pouvez pas modifier php.ini, créez un fichier .htaccess avec php_flag display_errors 1.
Tom

59

Vous pouvez inclure les lignes suivantes dans le fichier que vous souhaitez déboguer:

error_reporting(E_ALL);
ini_set('display_errors', '1');

Cela remplace les paramètres par défaut dans php.ini, qui obligent simplement PHP à signaler les erreurs au journal.


2
C'est vrai. Dans ce cas, les valeurs doivent être définies directement dans l'ini - pour un environnement de développement pur, cela peut être préférable de toute façon.
Tomalak

53

Configuration PHP

2 entrées dans php.ini dictent la sortie des erreurs:

  1. display_errors
  2. error_reporting

En production , display_errorsest généralement défini sur Off(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 sur E_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 sur E_ALLpour 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!

error_reporting(E_ALL);
ini_set("display_errors", "On");

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_logentrée.


30

Il existe une extension vraiment utile appelée " xdebug " qui rendra vos rapports beaucoup plus agréables.


2
En effet, c'est un outil de débogage très utile - rend les messages d'erreur beaucoup plus verbeux, avec des traces de pile complètes et des vidages variables et tout.
hbw

2
Oui. Et puis utilisez quelque chose comme le plugin VimDebugger pour parcourir votre code et découvrir où il va mal.
Sander Marechal

1
NetBeans avec xdebug ici. C'est tellement génial. Je suis nouveau sur PHP (généralement ASP.NET) et j'avais déjà émis des déclarations d'écho.
Certains Canuck

30

J'utilise toujours cette syntaxe tout en haut du script php.

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off

3
Je suis désolé, mais -1 pour ne pas avoir lu les autres réponses déjà publiées. Ceci est pris en charge dans le .htaccess comme déjà mentionné plusieurs fois.
Matthew Scharley

12
"hébergement gratuit" habituel ignore le .htaccess
FDisk

27

Pour un dépannage rapide et pratique, je suggère normalement ici sur SO:

error_reporting(~0); ini_set('display_errors', 1);

à 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.iniet 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:

  • Installez Xdebug et activez le débogage à distance avec votre IDE.

Voir aussi:


27

Il est possible d'enregistrer un hook pour rendre visible la dernière erreur ou avertissement.

function shutdown(){
  var_dump(error_get_last());
}

register_shutdown_function('shutdown');

l'ajout de ce code au début de votre index.php vous aidera à déboguer les problèmes.


1
C'est de l'or pur pour les gens qui se sont retrouvés coincés dans des hébergeurs qui ne montrent aucune erreur mais n'autorisent pas l'accès au journal
Rafael Mena Barreto

18

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_errorsconfiguration de PHP pendant l'exécution (cela inclut tout, de l'utilisation ini_setde 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_errorssur et error_reportingmis à -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.inifichier chargé ou votre fichier apache.confou httpd.confou 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 que display_errors = 1et error_reporting = -1dans 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 comme ini_set('display_errors', 1);ou error_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 ...

<?php
phpinfo();

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);ou error_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é a display_errorsdésactivé.

Beaucoup de gens (et les installations en stock de PHP) utiliseront un fichier de production-ini display_errorsdé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 votre ini_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.


17

Si vous êtes super cool, vous pouvez essayer:

$test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NAME'],0,3) == "192";

ini_set('display_errors',$test_server);
error_reporting(E_ALL|E_STRICT);

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.


2
Si vous différenciez les environnements local et de production, vous devez simplement activer ou désactiver les erreurs globalement (dans votre php.ini) et non dans le code qui peut également être du code de production. Si vous avez besoin de déboguer un site Web de production dans son environnement de production et que vous voulez seulement pouvoir voir les erreurs, utilisez $_SERVER['REMOTE_HOST']pour vérifier si le client est bien vous.
Jaap Haagmans

17

En haut de la page choisissez un paramètre

error_reporting(E_ERROR | E_WARNING | E_PARSE);

16

Pour persister et le rendre confortable, vous pouvez éditer votre fichier php.ini. Il est généralement stocké dans /etc/php.iniou /etc/php/php.ini, mais les plus locaux php.inipeuvent le remplacer, selon les directives de configuration de votre hébergeur. Vérifiez un phpinfo()fichier Loaded Configuration Fileen 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:

display_errors = stdout

16

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

/*
APPLICATION_LIVE will be used in process to tell if we are in a development or production environment.  It's generally set as early as possible (often the first code to run), before any config, url routing, etc.
*/

if ( preg_match( "%^(www.)?livedomain.com$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', true);
} elseif ( preg_match( "%^(www.)?devdomain.net$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', false);
} else {
    die("INVALID HOST REQUEST (".$_SERVER["HTTP_HOST"].")");
    // Log or take other appropriate action.
}


/*
--------------------------------------------------------------------
DEFAULT ERROR HANDLING
--------------------------------------------------------------------
Default error logging.  Some of these may be changed later based on APPLICATION_LIVE.
*/
error_reporting(E_ALL & ~E_STRICT);
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
ini_set ( "log_errors", 1);
ini_set ( "log_errors_max_len", 0);
ini_set ( "error_log", APPLICATION_ROOT."logs/php_error_log.txt");
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");

if ( ! APPLICATION_LIVE ) {
    // A few changes to error handling for development.
    // We will want errors to be visible during development.
    ini_set ( "display_errors", "1");
    ini_set ( "display_startup_errors", "1");
    ini_set ( "html_errors", "1");
    ini_set ( "docref_root", "http://www.php.net/");
    ini_set ( "error_prepend_string", "<div style='color:red; font-family:verdana; border:1px solid red; padding:5px;'>");
    ini_set ( "error_append_string", "</div>");
}

@Eli, Cela a cependant une surcharge d'exécution, par demande de page .
Pacerier

1 pour le concept qui néglige les paramètres de débogage, quel que soit le serveur configuré, bien pendant le déploiement ou la maintenance (en cours de développement)
justnajm

15
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
ini_set('html_errors', 1);

De plus, vous pouvez obtenir des informations plus détaillées avec xdebug .


Xdebug peut être activé à partir de php.ini
jewelhuq

15

Je recommande Nette Tracy pour une meilleure visualisation des erreurs et exceptions en PHP:

Capture d'écran de Nette Tracy


3
Tracy prend soin de bien paramétrer toutes les erreurs d'affichage et les options de rapport d'erreurs pour fournir une sortie dans de telles situations, comme décrit dans l'article d'origine ... Donc, cet outil est particulièrement utile pour s'adresser au demandeur "Quelqu'un peut-il recommander de bons conseils, outils et techniques de débogage PHP? ".
Jan Drábek

15
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

10
error_reporting(E_ALL | E_STRICT);

Et activez les erreurs d'affichage dans php.ini


9

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:

function dump_error_to_file($errno, $errstr) {
    file_put_contents('/tmp/php-errors', date('Y-m-d H:i:s - ') . $errstr, FILE_APPEND);
}
set_error_handler('dump_error_to_file');

7

Les deux lignes clés dont vous avez besoin pour obtenir des erreurs utiles de PHP sont:

ini_set('display_errors',1);
 error_reporting(E_ALL);

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):

switch($_SERVER['SERVER_NAME'])
{
    // local
    case 'yourdomain.dev':
    // dev
    case 'dev.yourdomain.com':
        ini_set('display_errors',1);
        error_reporting(E_ALL);
    break;
    //live
    case 'yourdomain.com':
        //...
    break;
}

6

FirePHP peut également être utile.


Je dois noter que FirePHP est un projet mort depuis FireBug a été intégré dans la console Firefox. ChromePHP est un peu le successeur là-bas, mais pas entièrement.
Machavity

6

ouvrez votre php.ini, assurez-vous qu'il est réglé sur:

display_errors = On

redémarrez votre serveur.


6

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.


6

si vous êtes un utilisateur ubuntu, accédez à votre terminal et exécutez cette commande

sudo tail -50f /var/log/apache2/error.log

où il affichera les 50 dernières erreurs. Il existe un fichier d'erreur error.logpour apache2 qui enregistre toutes les erreurs.


5

Pour activer le rapport d'erreur complet, ajoutez ceci à votre script:

error_reporting(E_ALL);

Cela provoque des avertissements, même minimes. Et, juste au cas où:

ini_set('display_errors', '1');

Force l'affichage des erreurs. Cela doit être désactivé sur les serveurs de production, mais pas lorsque vous développez.


Comme pour la réponse de Tomalak, cela ne fonctionne pas pour les erreurs de syntaxe.
Darryl Hein

5

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:

error_reporting(E_ALL);
ini_set("display_errors", 1);

Une autre façon d'utiliser des outils de débogage comme xdebug dans votre IDE.


4

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_reportingsur E_ALL | E_STRICTdans votre php.ini.

error_reporting = E_ALL | E_STRICT

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:

error_reporting = (E_ALL | E_STRICT) & ~E_NOTICE

Assurez-vous également que cette display_errorsoption est activée dans php.ini. Si votre version PHP est antérieure à 5.2.4, définissez-la sur On:

display_errors = "On"

Si votre version est 5.2.4 ou plus récente, utilisez:

display_errors = "stderr"

4

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:

[Sun Apr 19 19:09:11 2009] [error] [client 127.0.0.1] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\\webroot\\test\\test.php on line 9

3

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:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

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.


J'ai eu le même problème et son en raison du fichier de configuration par défaut Nginx manquant cette ligne.
Salem
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.