web-dev-qa-db-fra.com

PHP ne pas afficher les erreurs même si display_errors = On

J'ai un serveur Ubuntu exécutant Apache2 avec PHP 5. Dans php.ini, j'ai défini error_reporting = E_ALL | E_STRICT et error_reporting = E_ALL | E_STRICT, mais PHP n'affiche toujours pas les messages d'erreur. J'utilise également des hôtes virtuels Apache.

Aussi, quel est le rapport d’erreur le plus strict que PHP5.3 puisse offrir? Je souhaite que mon code soit le plus à jour et le plus sûr possible pour l'avenir.

38
wowpatrick

Vous devez également vous assurer que votre fichier php.ini inclut le jeu suivant, sinon les erreurs iront uniquement au journal défini par défaut ou spécifié dans la configuration de l'hôte virtuel.

display_errors = On

Le fichier php.ini est le lieu où les paramètres de base pour tous les PHP sur votre serveur. Toutefois, ils peuvent facilement être remplacés et modifiés à tout endroit du code PHP et effectuer tout ce qui suit cette modification. Une bonne vérification consiste à ajouter la directive display_errors à votre fichier php.ini. Si vous ne voyez pas d'erreur, mais qu'une est en cours de journalisation, insérez-la en haut du fichier à l'origine de l'erreur:

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

Si cela fonctionne, quelque chose de plus tôt dans votre code désactive l'affichage des erreurs.

73
Ray

J'ai eu le même problème et finalement résolu. Mon erreur est que j'ai essayé de changer /etc/php5/cli/php.ini , mais j'ai trouvé un autre php.ini ici: /etc/php5/Apache2/php.ini , changé display_errors = On, redémarré le serveur web et ça a fonctionné!

Peut-être que ce serait utile pour une personne distraite comme moi.

12
vk23

J'ai eu le même problème sur mon serveur virtuel avec Parallels Plesk Panel 10.4.4. La solution consistait (grâce à Zappa pour l'idée) à définir error_reporting sur 32767 au lieu de E_ALL . Dans Plesk: Accueil> Abonnements> (Sélectionner le domaine)> Personnaliser> PHP Paramètres> error_reporting - Enter valeur personnalisée - 32767

7
Bartek Kosa

Bien que ce soit un vieux message ……. J’ai eu une situation similaire qui m’a donné mal à la tête. Enfin, j'ai pensé inclure des sous-pages dans index.php avec "@include ..." "@" Masque toutes les erreurs même si display_errors est activé

3
Tomek

Lorsque vous mettez à jour la configuration dans le fichier php.ini, vous devrez peut-être redémarrer Apache. Essayez d’exécuter apachectl restart ou Apache2ctl restart, ou quelque chose comme ça.

De plus, dans votre fichier ini, vérifiez que vous avez display_errors = on , mais uniquement dans un environnement de développement, jamais dans une machine de production.

En outre, le rapport d'erreur le plus strict est exactement ce que vous avez cité, E_ALL | E_STRICT. Vous pouvez trouver plus d'informations sur les niveaux d'erreur dans les documents php .

2
user456814

Je veux juste ajouter un autre piège au cas où quelqu'un trouverait cette question avec un problème similaire au mien.

Lorsque vous utilisez Chrome (Or Chromium) et que PHP déclenche une erreur dans PHP le code situé à l'intérieur d'un attribut HTML, puis Chrome supprime l'intégralité de l'élément HTML. the PHP error dans votre navigateur.

Voici un exemple:

<p>
  <a href="<?=missingFunc()?>">test</a>
</p>

Lorsque vous appelez ce code dans Chrome, vous obtenez uniquement un document HTML avec la balise <p> initiale. Le reste est manquant. Aucun message d'erreur et aucun autre code HTML après ce <p>. Ceci est pas a PHP problème. Lorsque vous ouvrez cette page dans Firefox, vous pouvez voir le message d'erreur (lors de l'affichage du code HTML). Il s’agit donc d’un problème lié à Chrome. 

Je ne sais pas s'il y a une solution de contournement quelque part. Lorsque cela vous arrive, vous devez tester la page dans Firefox ou consulter le journal des erreurs Apache.

1
kayahr

J'ai eu le même problème mais j'ai utilisé ini_set('display_errors', '1'); à l'intérieur du script défectueux afin qu'il ne se déclenche jamais en cas d'erreur fatale/de syntaxe. Finalement je l'ai résolu en ajoutant ceci à mon .htaccess:

php_value auto_prepend_file /usr/www/{YOUR_PATH}/display_errors.php

display_errors.php:

<?php
ini_set('display_errors', 1);
error_reporting(-1);
?>

De ce fait, je n’étais pas obligé de changer le php.ini, de l’utiliser pour des sous-dossiers spécifiques et de le désactiver facilement.

1
mgutt

Vérifiez l'indicateur error_reporting, il doit être E_ALL, mais dans certaines versions de Plesk, il y a des guillemets ("E_ALL") au lieu de (E_ALL)

J'ai résolu ce problème en supprimant les guillemets (") dans php.ini 

à partir de ceci:

error_reporting = "E_ALL"

pour ça:

error_reporting = E_ALL
1
fremsoft

Bien que ce fil soit ancien mais néanmoins, je pense que je devrais poster une bonne réponse de cette réponse stackoverflow .

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

Cela m'a certainement sauvé après des heures d'essayer de faire fonctionner les choses. J'espère que ça aidera quelqu'un.

0
mikaelovi

Je sais que ce fil est ancien, mais je viens de résoudre un problème similaire avec mon serveur Ubuntu et j'ai pensé ajouter ici une note pour aider les autres, car ce fil était la première page de Google pour le sujet PHP ne affichant pas les erreurs.

J'ai essayé plusieurs paramètres de configuration pour la valeur error_reporting dans php.ini. De E_ALL | E_STRICT à E_ALL & E_NOTICE et aucun n'a fonctionné. Je n'entendais aucune erreur de syntaxe dans le navigateur (ce qui est plutôt gênant sur un serveur de développement). Après avoir modifié le paramètre error_reporting en "E_ALL", tout a commencé à fonctionner. Pas sûr qu'il s'agisse d'un problème spécifique à Ubuntu Oneric, mais après le redémarrage d'Apache, des erreurs ont commencé à apparaître dans les pages HTML servies par le serveur. Il semble que les options supplémentaires prêtent à confusion et que tous les rapports d’erreurs cessent. HTH quelqu'un d'autre.

0
Zappa

Je viens de rencontrer le même problème et il s’est avéré que mon problème n’était pas dans les fichiers php.ini, mais simplement que je démarrais le serveur Apache en tant qu’utilisateur régulier. Dès que j'ai fait un "redémarrage Sudo /etc/init.d/Apache2", mes erreurs ont été affichées. 

0
PhlegmaticFraggle

J'ai rencontré aussi le problème. Finalement j'ai trouvé la solution. J'utilise UBUNTU 16.04 LTS.

1) Ouvrez le fichier /ect/php/7.0/Apache2/php.ini (sous le /etc/php, il se peut que la version de PHP soit différente, mais Apache2/php.ini sera sous le fichier de version), recherchez la section ERROR HANDLING AND LOGGING et définissez la valeur {display_error = On, error_reporting = E_ALL}.

NOTE - Dans la section QUICK REFERENCE, on peut également trouver ces directives de valeurs, mais ne changez pas, changez simplement dans la section que j’ai dite.

2) Redémarrez le serveur Apache Sudo systemctl restart Apache2

0
mswd745

J'ai eu le même problème avec Apache et PHP 5.5 . Dans php.ini, j'avais les lignes suivantes:

error_reporting E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
display_errors Off

au lieu de ce qui suit:

error_reporting=E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
display_errors=Off

(le =sign manquait)

0
hiszpan

Lorsque vous exécutez PHP sur des fenêtres avec ISS, certains paramètres de configuration de ISS doivent être définis pour empêcher l'affichage des pages génériques par défaut.

1) Double-cliquez sur FastCGISettings, cliquez sur PHP puis sur Modifier. Définissez StandardErrorMode sur ReturnStdErrLn500.

StandardErrorMode

2) Allez sur le site, double-cliquez sur les pages d'erreur, cliquez sur le statut 500, cliquez sur Modifier les paramètres de fonction, modifiez les réponses d'erreur aux erreurs détaillées, cliquez sur ok

Modifier les réponses d'erreur aux erreurs détaillées

0
naw103

Assurez-vous que le fichier php.ini que vous modifiez se trouve dans le dossier/etc/php5/Apache2, sinon il n'aura aucun effet ...

0
Johnz