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.

drupal_stuff_alter
la source
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

kiamlaluno
la source
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:

Kenorb
la source
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.

forêt
la source
3

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

Remon
la source
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.

Matt Fletcher
la source
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');
Greg Lund-Chaix
la source
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
0

Il y a un module pour ça:

https://www.drupal.org/project/errorlevelpermission

De la page du projet:

Afin que vous puissiez

  • avoir un rôle constructeur de site (ou même un rôle spécial de débogueur), voir les erreurs et les notifications
  • Demandez aux autres de ne pas voir les erreurs et les avis.
geek-merlin
la source