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?
24 réponses
ç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
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.
dans votre php.ini :
display_errors = on
redémarrez ensuite votre serveur web.
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
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.
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'];
}
Cela va fonctionner:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
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
mettez ceci dans votre index .php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
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
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 () .
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
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.";
}
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 {
...
}
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
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
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.
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");
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.
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 =
C'est ce que j'ai appris. En PHP.Fichier INI
error_reporting = E_ALL
display_errors = On
<?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.
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().