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?
Ç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
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.
Dans votre php.ini:
display_errors = on
Puis redémarrez votre serveur Web.
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
_
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é.
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'];
}
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
Cela fonctionnera:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
Définissez ceci dans votre fichier index.php:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
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
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 ().
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 {
...
}
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
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.";
}
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
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.');
}
}
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 .
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");
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
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";
}
Ecrivez:
error_reporting(-1);
C'est ce que j'ai appris. Dans le fichier PHP.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 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.
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 ().
Vous voudrez peut-être utiliser ce code:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
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);
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.
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