web-dev-qa-db-fra.com

Comment avoir PHP des erreurs d'affichage? (J'ai ajouté ini_set et error_reporting, mais ne donne que 500 erreurs)

Donc, je n'ai pas vraiment d'erreurs dans ma page Web actuelle, mais je veux pouvoir voir une erreur quand elles apparaissent, au lieu de la page d'erreur HTTP 500. J'ai un peu cherché sur Google et j'ai pensé que l'ajout de ces deux lignes réglerait tout.

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

NOTE: Je n'ai pas accès au fichier php.ini, car j'utilise le serveur de mon compte scolaire.

J'ai donc introduit un bogue (pas de point-virgule après $ buggy) comme en haut de ma page: 

<?php 
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$buggy

$x = 4 + 2;
...

Cependant, je viens de recevoir une erreur de serveur:

"Le site Web a rencontré une erreur lors de la récupération de http://mywebpage.com/ . Il est peut-être en panne pour maintenance ou configuré de manière incorrecte."

Des idées?

MODIFIER:

J'ai reconfiguré mon code:

<?php 
include_once 'database/errorSettings.php';
?>
<?php 

$buggy // whoops
$x = 4 + 2;
...

errorSettings.php est le suivant:

<?php
    ini_set('display_errors', 'On');
    error_reporting(E_ALL);
?>

Mais cela ne fonctionne toujours pas ... mauvaise façon de reconfigurer?

32
user114518

Ce que vous avez est une erreur d'analyse. Ceux-ci sont lancés avant que tout code soit exécuté. Un fichier PHP doit être analysé dans son intégralité avant que son code ne puisse être exécuté. S'il y a une erreur d'analyse dans le fichier où vous définissez vos niveaux d'erreur, ils n'auront pas pris effet au moment où l'erreur est renvoyée.

Soit divisez vos fichiers en parties plus petites, comme définir les niveaux d'erreur dans un fichier, puis includes un autre fichier contenant le code (et les erreurs), ou définissez les niveaux d'erreur en dehors de PHP à l'aide de php.ini ou .htaccess. directives.

13
deceze

Vous devez définir la valeur error_reporting dans un fichier .htaccess. Comme il y a une erreur d'analyse, il n'exécute jamais la fonction error_reporting () dans votre code PHP.

Essayez ceci dans un fichier .htaccess (en supposant que vous puissiez en utiliser un):

php_flag display_errors 1
php_value error_reporting 30719

Je pense que 30719 correspond à E_ALL mais je peux me tromper.

Edit Update:http://php.net/manual/en/errorfunc.constants.php

int error_reporting ([ int $level ] )
---
32767   E_ALL (integer)     
All errors and warnings, as supported, except of   level E_STRICT prior to PHP 5.4.0.   32767 in PHP 5.4.x, 30719 in PHP 5.3.x, 6143 in PHP   5.2.x, 2047 previously
12
Nick Clark

Ajoutant à ce que deceze dit ci-dessus. Il s’agit d’une erreur d’analyse. Par conséquent, pour déboguer une erreur d’analyse, créez un nouveau fichier dans la racine nommé debugSyntax.php. Mettez ceci dedans:

<?php

///////    SYNTAX ERROR CHECK    ////////////
error_reporting(E_ALL);
ini_set('display_errors','On');

//replace "pageToTest.php" with the file path that you want to test. 
include('pageToTest.php'); 

?>

Exécutez la page debugSyntax.php et il affichera les erreurs d’analyse de la page que vous avez choisi de tester.

5
Matt

Écrivez simplement le code suivant sur le fichier PHP:

ini_set('display_errors','on');
2
Mehul V.

Pour les personnes utilisant Codeigniter (je suis sur C3):

Le fichier index.php remplace la configuration de php.ini, ainsi de suite le fichier index.php, ligne 68

case 'development':
        error_reporting(-1);
        ini_set('display_errors', 1);
    break;

Vous pouvez modifier cette option pour définir ce dont vous avez besoin. Voici la liste complète:

1   E_ERROR
2   E_WARNING
4   E_PARSE
8   E_NOTICE
16  E_CORE_ERROR
32  E_CORE_WARNING
64  E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024    E_USER_NOTICE
6143    E_ALL
2048    E_STRICT
4096    E_RECOVERABLE_ERROR

J'espère que ça aide.

0
Marcelo Agimóvel

Les erreurs de syntaxe ne sont pas facilement vérifiées sur les serveurs externes, mais simplement les erreurs d'exécution. 

Ce que je fais? Tout comme toi, j'utilise 

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

Cependant, avant l'exécution, je vérifie les erreurs de syntaxe dans un fichier PHP à l'aide d'un vérificateur de syntaxe en ligne PHP. 

Le meilleur, à mon humble avis est PHP Code Checker

Je copie tout le code source, le colle dans la boîte principale et cliquez sur le bouton Analyze

Ce n’est pas la méthode la plus pratique, mais les 2 procédures sont complémentaires et résout complètement le problème.

0
Paulo Buchsbaum

J'ai eu ce problème avec PHP5.4 et Plesk 11.5

D'une manière ou d'une autre, les paramètres de rapport d'erreur et d'affichage d'erreur de la page de configuration du domaine Plesk remplaçaient complètement les paramètres locaux dans les scripts .htaccess ou PHP. Je n'ai pas trouvé le moyen d'éviter cela, utilisez donc les paramètres de Plesk pour activer et désactiver les rapports d'erreur.

Vous pouvez avoir des paramètres dans votre fichier php.ini qui empêchent le site local de remplacer ces paramètres, éventuellement appliqués par le panneau de contrôle utilisé sur votre serveur.

0
Jason