Comment puis-je réduire au silence les erreurs PHP?


32

Existe-t-il un moyen de supprimer toutes les erreurs, avertissements et notifications PHP dans Drupal? Ils sont utiles sur le site de développement, mais ils représentent un risque important pour la sécurité et rendent le site moins attrayant en direct.

Je sais que sur Drupal 6, la page dans admin / settings / rapport d'erreurs peut empêcher Drupal d'écrire des erreurs à l'écran, mais où puis-je le trouver dans Drupal 7? Il semble qu'il manque.


3
Notez cependant que les erreurs ont un rôle très important: elles indiquent que quelque chose ne va pas. Surprimer cela ne résout pas le problème sous-jacent. C'est ce que l'on appelle également la "méthode russe": lorsque le voyant d'alarme d'une centrale nucléaire commence à clignoter, il suffit de retirer l'ampoule. Le voyant d'alarme ne clignote plus; pas de problème.
Berkes

Marrant :). Mais je ne supprime que les erreurs sur le site de production.
drupal_stuff_alter

Drupal a la possibilité de décider quelles erreurs doivent être affichées. les erreurs non affichées sont toujours enregistrées dans la base de données et affichées dans admin / reports / dblog.
kiamlaluno

@kiamlaluno, dans la production est assez bonne (présenter un message d'erreur indiquant qu'un paiement a échoué est toujours préférable, alors laisser votre client dans l'incertitude). Mais dans le développement et les tests, mon expérience est que les erreurs introduites dans Dblog ne sont pas négligées. Les Drupalsites contenant des centaines d'avis et d'avertissements par heure sont sans exception. Et les vraies exceptions et erreurs sont perdues dans le bruit. Le mieux est de forcer chaque avis sur le développeur.
Berkes

Oui, mais le PO semble intéressé à cacher ces erreurs dans un site de production. (Voir: "Ils sont utiles sur le site de développement, mais ils représentent un risque important pour la sécurité et rendent le site moins
intéressant

Réponses:


29

Le chemin change, comme dans Drupal 7, la même page que celle que vous verriez auparavant dans admin / settings / error-reporting est maintenant dans admin / config / development / logging.

capture d'écran


1
Pour une raison quelconque, je ne suis pas capable de le faire. En cliquant sur Enregistrer, ma sélection est réinitialisée. Est-il possible de changer cela manuellement dans la base de données ou quelque chose comme ça ??
Niranjan N Raju

17

Comme suggéré, dans Administration » Configuration » Development(at /admin/config/development/logging), vous pouvez trouver le paramètre permettant de désactiver l' affichage des messages d'erreur, mais cela ne désactivera pas complètement les erreurs / notifications.

C'est parce que Drupal 7 applique E_ALL, donc ils sont toujours écrits dans syslog et vous pouvez les voir dans les journaux récents affectant les performances de votre site Web.

Pour désactiver complètement les avis, vous devez ajouter la ligne suivante dans votre fichier settings.phpou php.ini:

ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

Affiche toutes les erreurs, à l'exception des avis et des avertissements relatifs aux normes de codage.

Pour faire taire toutes les erreurs PHP, ce qui n'est pas recommandé, vous pouvez essayer d'ajouter votre fichier de paramètres:

error_reporting(0); // Disable all errors.

Voir: error_reporting()


Code Drupal 7 responsable pour la E_ALLjournalisation (fichier:) includes/bootstrap.inc:

// Enforce E_ALL, but allow users to set levels not part of E_ALL.
error_reporting(E_ALL | error_reporting());

Voir également:


4

Une chose que personne n'a mentionnée qui pourrait être utile aux gens à savoir est que Drupal 7 ignore tous les niveaux de rapport d'erreur système locaux. Vous ne pouvez donc pas utiliser .htaccess ou même php.ini pour définir les niveaux de rapport d'erreur php dans Drupal.

Un correctif est proposé pour cela dans D8, mais actuellement dans D7, vous êtes limité aux trois masques d'erreur (tous, aucun, ou erreurs et avertissements) définis dans la page d'administration indiquée par kiamlaluno.


3

Les paramètres sont toujours dans admin / config / development / logging :)


Merci beaucoup! Je veux toujours avoir les notifications vertes en vie. J'espère qu'ils ne disparaîtront pas.
drupal_stuff_alter

2

Je ne sais pas pourquoi la méthode Drush est si non documentée, mais j'ai dans mon script de construction:

drush vset error_level 0

... qui enregistre les messages d'erreur dans le journal mais ne les affiche pas à l'écran.


1

Vous devrez peut-être ajouter des devis à la solution kenorb indiquée ci-dessus:

ini_set('error_reporting', 'E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR');

C'est faux - ce sont des constantes, elles ne doivent pas être citées. error_reporting est une valeur entière composée des constantes entières ORed ensemble. Ce n'est pas un paramètre de chaîne composé de noms constants comme vous l'avez ici.
datashaman

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.