web-dev-qa-db-fra.com

Comment obtenir les erreurs PHP à afficher?

J'ai vérifié mon fichier PHP init (php.ini) et les erreurs d'affichage sont définies. Le rapport d'erreur est également E_ALL. J'ai redémarré mon serveur Web Apache.

J'ai même mis ces lignes en haut de mon script, et il ne détecte même pas les erreurs simples d'analyse. Par exemple, je déclare des variables avec un "$" et je ne ferme pas les instructions";". Mais tous mes scripts affichent une page vierge sur ces erreurs, mais je souhaite réellement voir erreurs dans la sortie de mon navigateur.

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

Que reste-t-il à faire?

1598
Abs

Ça fonctionne toujours pour moi:

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

Cependant, cela ne fait pas que PHP montre les erreurs d'analyse - le seul moyen de les afficher est de modifier votre php.ini avec cette ligne:

display_errors = on
3025
Fancy John

Vous ne pouvez pas intercepter les erreurs d'analyse lors de l'activation de la sortie d'erreur au moment de l'exécution, car il analyse le fichier avant d'exécuter quoi que ce soit (et comme il rencontre une erreur pendant cette opération, il n'exécutera rien). Vous devrez modifier la configuration actuelle du serveur pour que display_errors soit activé et que le niveau approprié error_reporting soit utilisé. Si vous n'avez pas accès à php.ini, vous pourrez utiliser .htaccess ou similaire, selon le serveur.

Cette question peut fournir des informations supplémentaires.

150
Michael Madsen

Dans votre php.ini:

display_errors = on

Puis redémarrez votre serveur Web.

135
user1803477

Pour afficher toutes les erreurs, vous devez:

1. Vous avez ces lignes dans le script PHP que vous appelez depuis le navigateur (généralement _index.php_):

_error_reporting(E_ALL);
ini_set('display_errors', '1');
_

2. (a) Assurez-vous que ce script n'a pas d'erreur de syntaxe

- ou -

2. (b) Set _display_errors = On_ dans votre _php.ini_

Sinon, il ne peut même pas exécuter ces 2 lignes!

Vous pouvez vérifier les erreurs de syntaxe dans votre script en exécutant (sur la ligne de commande):

_php -l index.php
_

Si vous incluez le script d'un autre script PHP, alors il sera affiche les erreurs de syntaxe dans le script inclus . Par exemple:

index.php

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

// Any syntax errors here will result in a blank screen in the browser

include 'my_script.php';
_

my_script.php

_adjfkj // This syntax error will be displayed in the browser
_
93
andre

Certains fournisseurs d'hébergement Web vous permettent de modifier les paramètres PHP dans le fichier .htaccess.

Vous pouvez ajouter la ligne suivante:

php_value display_errors 1

J'ai eu le même problème que le vôtre et cette solution l'a corrigé.

47
Kalhua

Vous constaterez peut-être que tous les paramètres de "rapport d'erreur" ou "d'erreur d'affichage" ne semblent pas fonctionner en PHP 7. Cela est dû au fait que la gestion des erreurs a été modifiée. Essayez ceci à la place:

try{
     // Your code
} 
catch(Error $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

Ou, pour attraper les exceptions et les erreurs en une fois (ce n'est pas rétrocompatible avec PHP 5):

try{
     // Your code
} 
catch(Throwable $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}
36
Frank Forte

Utilisation:

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

C’est la meilleure façon de l’écrire, mais une erreur de syntaxe donne un résultat vide. Utilisez donc la console pour vérifier les erreurs de syntaxe. Le meilleur moyen de déboguer le code PHP consiste à utiliser la console; lancez ce qui suit:

php -l phpfilename.php
31
Abhijit Jagtap

Cela fonctionnera:

<?php
     error_reporting(E_ALL);
     ini_set('display_errors', 1);    
?>
31
Lead Developer

Définissez ceci dans votre fichier index.php:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
20
Sumit Gupta

Créez un fichier appelé php.ini dans le dossier où se trouve votre fichier PHP.

Dans php.ini, ajoutez le code suivant (je donne une simple erreur montrant le code):

display_errors = on

display_startup_errors = on
18
NavyaKumar

Voici un script PHP:

<?php
    ini_set("display_startup_errors", 1);
    ini_set("display_errors", 1);

    /* Reports for either E_ERROR | E_WARNING | E_NOTICE  | Any Error*/
    error_reporting(E_ALL);

    echo(abc); /* Notice: abc is an undefined constant */
?>

Pour une explication plus détaillée des erreurs PHP, visitez Erreur PHP - error_reporting ().

16
B.Balamanigandan

Si, malgré toutes les réponses ci-dessus (ou si vous ne pouvez pas éditer votre fichier php.ini), vous ne pouvez toujours pas obtenir un message d'erreur, essayez de créer un nouveau fichier PHP permettant d'activer le rapport d'erreur et puis inclure le fichier de problème. par exemple:

error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('problem_file.php');

Bien que tout soit correctement défini dans mon fichier php.ini, c’était le seul moyen de détecter une erreur d’espace de nommage. Mon scénario exact était:

//file1.php
namespace a\b;
class x {
    ...
}

//file2.php
namespace c\d;
use c\d\x; //Dies because it's not sure which 'x' class to use
class x {
    ...
}
14
jxmallett

Lorsque vous utilisez PHP en tant que module Apache, vous pouvez modifier les paramètres de configuration à l'aide de directives contenues dans les fichiers de configuration Apache (par exemple, httpd.conf) et les fichiers .htaccess. Vous aurez besoin des privilèges "AllowOverride Options" ou "AllowOverride All".

Vérifie ça

http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabling-error-display-php-via-htaccess

13
mike

Si vous vous trouvez dans une situation où vous ne pouvez pas modifier le paramètre via php.ini ou .htaccess, vous ne pouvez pas afficher les erreurs lorsque vos scripts PHP contiennent des erreurs d'analyse. . Vous devez alors résoudre le problème en linter les fichiers sur la ligne de commande comme ceci:

find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"

Si votre hôte est tellement verrouillé qu'il ne permet pas de modifier la valeur via php.ini ou .htaccess, il peut également interdire de modifier la valeur via ini_set. Vous pouvez vérifier cela avec le script PHP suivant:

<?php
if( !ini_set( 'display_errors', 1 ) ) {
  echo "display_errors cannot be set.";
} else {
  echo "changing display_errors via script is possible.";
}
12
chiborg

Comme nous utilisons maintenant PHP 7, les réponses données ici ne sont plus correctes. Le seul qui reste OK est celui de Frank Forte , car il parle de PHP 7.

De l’autre côté, plutôt que d’essayer d’attraper les erreurs avec un essai/attraper, vous pouvez utiliser une astuce: utilisez include.

Voici trois morceaux de code:

Fichier: tst1.php

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', 'On');
    // Missing " and ;
    echo "Testing
?>

Exécuter ceci en PHP 7 ne montrera rien.

Maintenant, essayez ceci:

Fichier: tst2.php

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', 'On');
    include ("tst3.php");
?>

Fichier: tst3.php

<?php
    // Missing " and ;
    echo "Testing
?>

Maintenant, lancez tst2 qui définit le rapport d’erreur, puis incluez tst3. Tu verras:

Erreur d'analyse: erreur de syntaxe, fin de fichier inattendue, variable en attente (T_VARIABLE) ou $ {(T_DOLLAR_OPEN_CURLY_BRACES) ou {$ (T_CURLY_OPEN) dans tst3.php à la ligne 4

12
Peter

Je voudrais généralement aller avec le code suivant dans mon plaine PHP projet qui sont très petits. Si le projet prend de l'ampleur, je recommanderai:

if(!defined('ENVIRONMENT')){
    define('ENVIRONMENT', 'DEVELOPMENT');
}

$base_url = null;

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'DEVELOPMENT':
            $base_url = 'http://localhost/product/';
            ini_set('display_errors', 1);
            ini_set('display_startup_errors', 1);
            error_reporting(E_ALL|E_STRICT);
            break;

        case 'PRODUCTION':
            $base_url = 'Production URL'; /* https://google.com */
            error_reporting(0);
            /* Mechanism to log errors */
            break;

        default:
            exit('The application environment is not set correctly.');
    }
}
12
Channaveer Hakari

Vous pouvez faire quelque chose comme ci-dessous:

Définissez les paramètres ci-dessous dans votre fichier d’index principal:

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

Ensuite, en fonction de vos besoins, vous pouvez choisir ce que vous voulez montrer:

Pour toutes les erreurs , avertissements et avis:

    error_reporting(E_ALL); OR error_reporting(-1);

Pour toutes les erreurs :

    error_reporting(E_ERROR);

Pour tous les avertissements:

    error_reporting(E_WARNING);

Pour tous les notifications:

    error_reporting(E_NOTICE);

Pour plus d'informations, consultez here .

11
Binit Ghetiya

Vous pouvez ajouter votre propre gestionnaire d'erreurs personnalisé, qui peut fournir des informations de débogage supplémentaires. En outre, vous pouvez le configurer pour vous envoyer les informations par courrier électronique.

function ERR_HANDLER($errno, $errstr, $errfile, $errline){
    $msg = "<b>Something bad happened.</b> [$errno] $errstr <br><br>
    <b>File:</b> $errfile <br>
    <b>Line:</b> $errline <br>
    <pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>";

    echo $msg;

    return false;
}

function EXC_HANDLER($exception){
    ERR_HANDLER(0, $exception->getMessage(), $exception->getFile(), $exception->getLine());
}

function shutDownFunction() {
    $error = error_get_last();
    if ($error["type"] == 1) {
        ERR_HANDLER($error["type"], $error["message"], $error["file"], $error["line"]);
    }
}

set_error_handler ("ERR_HANDLER", E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
register_shutdown_function("shutdownFunction");
set_exception_handler("EXC_HANDLER");
10
lintabá

Ce code sur le dessus devrait fonctionner:

error_reporting(E_ALL);

Cependant, essayez de modifier le code sur le téléphone dans le fichier:

error_reporting =on
6
Wembo Mulumba

La meilleure solution/facile/rapide que vous pouvez utiliser s'il s'agit d'un débogage rapide consiste à entourer votre code d'exceptions. C'est ce que je fais quand je veux vérifier rapidement quelque chose en production.

try {
    // Page code
}
catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
6
Xakiru

Ecrivez:

error_reporting(-1);
4
jewelhuq

C'est ce que j'ai appris. Dans le fichier PHP.ini,

error_reporting = E_ALL
display_errors = On
4
Salam
    <?php
    // Turn off error reporting
    error_reporting(0);

    // Report runtime errors
    error_reporting(E_ERROR | E_WARNING | E_PARSE);

    // Report all errors
    error_reporting(E_ALL);

    // Same as error_reporting(E_ALL);
    ini_set("error_reporting", E_ALL);

    // Report all errors except E_NOTICE
    error_reporting(E_ALL & ~E_NOTICE);
    ?>

Pendant que votre site est actif, le fichier php.ini doit avoir les erreurs d’affichage-display désactivées pour des raisons de sécurité. Toutefois, pour l’environnement de développement, display_errors peut être activé pour le dépannage.

4
pardeep

Si vous avez installé Xdebug , vous pouvez modifier chaque paramètre en définissant:

xdebug.force_display_errors = 1;
xdebug.force_error_reporting = -1;

force_display_errors

Type: int, Valeur par défaut: 0, Introduit dans Xdebug> = 2.3 Si ce paramètre est défini sur 1, les erreurs seront toujours affichées, quel que soit le paramètre d'affichage de la variable display_errors de PHP.

force_error_reporting

Type: int, valeur par défaut: 0, introduite dans Xdebug> = 2.3. Ce paramètre est un masque de bits, comme error_reporting. Ce masque binaire sera logiquement OU avec le masque binaire représenté par error_reporting to dermine, quelles erreurs doivent être affichées. Ce réglage ne peut être fait que dans php.ini et vous permet de forcer l'affichage de certaines erreurs, quelle que soit l'application faite par ini_set ().

3
Peter Haberkorn

Vous voudrez peut-être utiliser ce code:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
3
user8031209

Vous pouvez le faire en changeant le fichier php.ini et en ajoutant ce qui suit

display_errors = on
display_startup_errors = on

OU vous pouvez également utiliser le code suivant car cela fonctionne toujours pour moi

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

Outre les fonctions php.ini et ini_set () dans le script php, vous pouvez faire la même chose avec les directives .htaccess et httpd.conf indiquées ci-dessous. Certains fournisseurs d'hébergement permettent de définir les paramètres php via .htaccess et httpd.conf.

# cacher les erreurs php

php_flag display_startup_errors ON

php_flag display_errors ON

php_flag html_errors ON

php_flag log_errors on

php_flag ignore_repeated_errors off

php_flag ignore_repeated_source off

php_flag report_memleaks on

php_flag track_errors sur

php_value docref_root 0

php_value docref_ext 0

php_value error_log /home/path/public_html/domain/PHP_errors.log

php_value error_reporting 999999999

php_value error_reporting -1

php_value log_errors_max_len 0

Ordre permettre, refuser

Refuser à tous

Satisfaire tout

0
mohitesachin217