Comment faire pour que les erreurs PHP s'affichent?

j'ai vérifié mon fichier PHP ini et les erreurs d'affichage sont réglées et aussi le rapport d'erreur est E_ALL . J'ai redémarré mon serveur web Apache.

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

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

Que reste-t-il à faire?

1359
demandé sur Peter Mortensen 2009-06-27 23:09:59
la source

24 ответов

ça marche toujours pour moi:

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

cependant, cela ne fait pas PHP pour afficher les erreurs d'analyse - la seule façon de montrer ces erreurs est de modifier votre php.ini avec cette ligne:

display_errors = on
2633
répondu Fancy John 2015-10-23 15:24:19
la source

vous ne pouvez pas attraper d'erreurs d'analyse lorsque vous activez la sortie d'erreur à l'exécution, parce qu'il analyse le fichier avant d'exécuter quoi que ce soit (et puisqu'il rencontre une erreur pendant cela, il n'exécutera rien). Vous devrez modifier la configuration actuelle du serveur pour que display_errors soit activé et que le niveau approriate error_reporting soit utilisé. Si vous n'avez pas accès au php.ini, vous pouvez être en mesure d'utiliser .htaccess ou similaire, selon le serveur.

Cette question peut fournir des renseignements supplémentaires.

133
répondu Michael Madsen 2017-05-23 15:26:34
la source

dans votre php.ini :

display_errors = on

redémarrez ensuite votre serveur web.

121
répondu user1803477 2013-01-08 13:48:33
la source

Pour afficher toutes les erreurs, vous devez:

1. Avoir ces lignes dans le script PHP que vous appelez à partir du navigateur (généralement index.php ):

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

2.(a) assurez-vous que ce script n'a aucune erreur de syntaxe

- ou -

2.B) mettre display_errors = On dans votre php.ini

sinon, il ne peut même pas courir ces 2 lignes!

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

php -l index.php

si vous incluez le script d'un autre script PHP alors il affichera erreurs de syntaxe dans le inclus script. 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
80
répondu andre 2018-10-08 17:44:33
la source

certains hébergeurs web vous permettent de changer les paramètres de PHP dans le .htaccess "151930920 de fichier".

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 fixe.

40
répondu Kalhua 2015-08-08 19:39:53
la source

vous pourriez trouver tous les paramètres pour" Rapport d'erreur "ou" erreurs d'affichage " ne semblent pas fonctionner dans PHP 7. C'est parce que la gestion des erreurs a changé. Essayez plutôt ceci:

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 d'un seul coup (ce qui n'est pas compatible 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'];
}
30
répondu Frank Forte 2017-06-06 21:32:06
la source

Cela va fonctionner:

<?php
     error_reporting(E_ALL);
     ini_set('display_errors', 1);    
?>
26
répondu Mahendra Jella 2016-12-27 18:20:51
la source

utiliser:

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 une sortie vierge, donc utilisez la console pour vérifier les erreurs de syntaxe. La meilleure façon de déboguer le code PHP est d'utiliser la console; exécutez ce qui suit:

php -l phpfilename.php
25
répondu Abhijit Jagtap 2016-12-27 18:27:08
la source

mettez ceci dans votre index .php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
16
répondu Sumit Gupta 2017-10-26 05:57:55
la source

créer un fichier appelé php.ini dans le dossier où votre fichier PHP réside.

à l'Intérieur de php.ini ajouter le code suivant (je donne une simple erreur montrant le code):

display_errors = on

display_startup_errors = on
15
répondu NavyaKumar 2016-12-27 18:21:52
la source

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 () .

12
répondu B.Balamanigandan 2016-12-27 18:24:06
la source

en utilisant PHP comme module Apache, nous pouvons modifier les paramètres de configuration en utilisant des directives dans les fichiers de configuration Apache (par exemple httpd.conf) et .fichiers htaccess. Pour ce faire, vous aurez besoin des privilèges "AllowOverride Options" ou "AllowOverride All".

Cochez cette

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

10
répondu mike 2014-01-28 19:41:05
la source

si vous vous trouvez dans une situation où vous ne pouvez pas modifier le paramètre via php.ini ou .htaccess vous n'avez pas de chance pour afficher des erreurs lorsque vos scripts PHP contiennent des erreurs d'analyse. Vous devez alors résoudre à linting 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 ainsi verrouillé qu'il ne permet pas de changer la valeur via php.ini ou .htaccess , il peut également refuser changer 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.";
}
9
répondu chiborg 2016-01-11 15:11:27
la source

si, malgré toutes les réponses ci-dessus (ou vous ne pouvez pas éditer votre php.ini file), vous ne pouvez toujours pas obtenir un message d'erreur, essayez de faire un nouveau fichier PHP qui permet de signaler des erreurs et ensuite inclure le fichier problème. par exemple:

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

malgré le fait que tout soit réglé correctement dans mon fichier php.ini , c'était la seule façon pour moi d'attraper une erreur d'espace de noms. 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 {
    ...
}
9
répondu jxmallett 2018-07-18 05:48:38
la source

comme nous exécutons maintenant PHP7, les réponses données ici ne sont plus correctes. Le seul qui est encore OK est celui de Frank Forte, alors qu'il parle de PHP7. De l'autre côté, plutôt que d'essayer d'attraper l'erreur avec un essai/attraper, vous pouvez utiliser un truc: utiliser inclure. Ici 3 morceaux de code:

fichier: tst1.php

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

exécuter ceci dans PHP7 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
?>  

Lancez maintenant tst2 qui définit le rapport d'erreur puis incluez tst3. Vous verrez:

erreur de Parse: erreur de syntaxe, fin de fichier inattendue, variable attendue (T_VARIABLE) ou {${(T_DOLLAR_OPEN_CURLY_BRACES) ou {$(T_CURLY_OPEN) dans tst3.php sur la ligne 4

8
répondu Peter 2017-05-20 15:07:56
la source

vous pouvez faire quelque chose comme ci-dessous:

défini ci-dessous les paramètres dans votre fichier d'index principal

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

ensuite, en fonction de vos exigences, vous pouvez choisir ce que vous voulez montrer:

pour toute erreur, avertissement et notification

    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 Tout Avis

    error_reporting(E_NOTICE);

pour plus D'informations, consultez ici

8
répondu Binit Ghetiya 2018-09-07 21:37:29
la source

j'utiliserais généralement le code suivant dans mon projet simple php qui sont très petits, si le projet prend de l'ampleur alors je le 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   =   'Prod url'; /* https://google.com */
            error_reporting(0);
            /* Mechanism to log errors */
            break;

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

Espérons que cette aide.

7
répondu Channaveer Hakari 2017-02-01 10:16:23
la source

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 par e-mail.

function ERR_HANDLER($errno ,$errstr, $errfile, $errline){
    $msg="<b>Someting 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");
5
répondu lintabá 2017-06-04 17:41:28
la source

la meilleure solution/facile / rapide que vous pouvez utiliser si c'est un débogage rapide, est d'entourer votre code avec des exceptions de capture. C'est ce que je fais quand je veux vérifier quelque chose rapidement sur la production.

try {

//Page code

} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

J'espère que cela aidera.

3
répondu Xakiru 2017-03-27 05:31:01
la source

ce code en haut devrait fonctionner error_reporting (E_ALL);

Cependant essayer de modifier le code sur le téléphone dans le fichier

error_reporting =

2
répondu Wembo Mulumba 2017-05-09 06:28:31
la source

il suffit d'écrire:

error_reporting(-1);
1
répondu jewelhuq 2017-01-13 21:56:39
la source

C'est ce que j'ai appris. En PHP.Fichier INI

error_reporting = E_ALL
display_errors = On
1
répondu Salam 2017-04-27 19:29:49
la source
<?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 en direct, le php.ini fichier doit avoir display_errors désactivé pour des raisons de sécurité. Toutefois, pour l'environnement de développement, display_errors peut être activé pour le dépannage.

1
répondu pardeep 2018-05-24 11:48:07
la source

si vous avez Xdebug installé, vous pouvez outrepasser tous les paramètres en paramétrant:

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 est à 1 alors les erreurs seront toujours affichés, peu importe ce qu'est le paramètre display_errors de PHP.

force_error_reporting

Type: int, valeur par défaut: 0, Introduit dans Xdebug > = 2,3 Ce paramètre est un bitmask, comme error_reporting. Ce bitmask sera logiquement ORed avec le bitmask représenté par error_reporting pour déterminer quelles erreurs doivent être affichées. Ce paramètre ne peut être fait qu'en php.ini et vous permet de forcer certaines erreurs de prouver n'importe quelle application avec la fonction ini_set().

0
répondu Peter Haberkorn 2017-10-19 08:45:41
la source

Autres questions sur php error-reporting