Wie kann ich PHP-Fehler ausschalten?

32

Gibt es eine Möglichkeit, alle PHP-Fehler, Warnungen und Hinweise in Drupal zum Schweigen zu bringen? Sie sind auf der Entwicklerseite nützlich, stellen jedoch ein großes Sicherheitsrisiko dar und lassen die Seite im Live-Betrieb schlecht aussehen.

Ich weiß, dass auf Drupal 6 die Seite unter admin / settings / error-reporting Drupal daran hindern kann, Fehler auf den Bildschirm zu schreiben, aber wo finde ich das in Drupal 7? Es scheint, dass es fehlt.

drupal_stuff_alter
quelle
3
Beachten Sie jedoch, dass Fehler eine sehr wichtige Rolle spielen: Sie weisen darauf hin, dass etwas nicht stimmt. Das zu unterdrücken, löst das zugrunde liegende Problem nicht. Dies wird auch als "russische Methode" bezeichnet: Wenn die Alarmleuchte in einem Kernkraftwerk zu blinken beginnt, entfernen Sie einfach die Glühbirne. Alarmleuchte blinkt nicht mehr; keine Probleme.
Berkes
Lustig :). Aber ich unterdrücke nur Fehler am Produktionsstandort.
Drupal_stuff_alter
Drupal hat die Möglichkeit zu entscheiden, welche Fehler angezeigt werden sollen. Nicht angezeigte Fehler werden weiterhin in der Datenbank aufgezeichnet und in admin / reports / dblog angezeigt.
kiamlaluno
@kiamlaluno, in der Produktion ist das etwas in Ordnung (dennoch ist es immer besser, einen Fehler zu melden, dass eine Zahlung fehlgeschlagen ist, als Ihren Kunden in Ungewissheit zu lassen). Aber in der Entwicklung und im Testen ist meine Erfahrung, dass in dblog geschobene Fehler vernachlässigt werden. Drupalsites mit Hunderten von Hinweisen und Warnungen pro Stunde, die dort protokolliert werden, bilden keine Ausnahme. Und echte Ausnahmen und Fehler gehen im Rauschen verloren. Am besten ist es, jede einzelne Notiz dem Entwickler ins Gesicht zu drücken.
Berkes
Richtig, aber das OP scheint daran interessiert zu sein, diese Fehler in einer Produktionsstätte zu verbergen. (Siehe "Sie sind auf der Entwicklerseite nützlich, stellen jedoch ein großes Sicherheitsrisiko dar und lassen die Seite live schlecht aussehen.")
kiamlaluno

Antworten:

29

Der Pfad ändert sich, wie in Drupal 7 die gleiche Seite, die Sie zuvor unter admin / settings / error-reporting gesehen haben, jetzt unter admin / config / development / logging.

Bildschirmfoto

kiamlaluno
quelle
1
Aus irgendeinem Grund bin ich nicht in der Lage, dies zu tun. Beim Klicken auf Speichern wird meine Auswahl zurückgesetzt. Gibt es eine Möglichkeit, dies manuell in der Datenbank oder so etwas zu ändern?
Niranjan N Raju
17

Wie vorgeschlagen, finden Sie in Administration » Configuration » Development(at /admin/config/development/logging) die Einstellung zum Deaktivieren der Anzeige von Fehlermeldungen, aber sie deaktiviert Fehler / Benachrichtigungen nicht vollständig.

Dies liegt daran, dass Drupal 7 E_ALL erzwingt. Sie werden also weiterhin in syslog geschrieben und Sie können sie in den neuesten Protokollen sehen, die sich auf die Leistung Ihrer Website auswirken .

Um die Benachrichtigungen vollständig zu deaktivieren, müssen Sie die folgende Zeile in Ihre settings.phpoder php.ini-Datei einfügen:

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

Alle Fehler außer Hinweisen und Warnhinweisen zu Kodierungsstandards anzeigen.

Um alle PHP-Fehler auszuschalten, die nicht empfohlen werden, können Sie versuchen, Ihre Einstellungsdatei hinzuzufügen:

error_reporting(0); // Disable all errors.

Sehen: error_reporting()


Verantwortlicher Drupal 7-Kerncode für die E_ALLProtokollierung (Datei:) includes/bootstrap.inc:

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

Siehe auch:

Kenorb
quelle
4

Eine Sache, die niemand erwähnt hat und die hilfreich sein kann, wenn man sie kennt, ist, dass Drupal 7 alle lokalen Systemfehlerberichterstattungsstufen ignoriert. Sie können also nicht .htaccess oder sogar php.ini verwenden, um PHP-Fehlerberichterstattungsstufen in Drupal festzulegen.

In D8 wird hierfür ein Patch vorgeschlagen, in D7 sind Sie jedoch derzeit auf die 3 Fehlermasken beschränkt - alle, keine oder Fehler und Warnungen -, die auf der Kiamlaluno-Administrationsseite angegeben sind.

Wald
quelle
3

Einstellungen sind immer in admin / config / development / logging :)

Remon
quelle
Vielen Dank! Ich möchte weiterhin die grünen Benachrichtigungen erhalten. Ich hoffe, sie verschwinden nicht.
Drupal_stuff_alter
2

Nicht sicher, warum die Drush-Methode so undokumentiert ist, aber ich habe in meinem Build-Skript:

drush vset error_level 0

... wodurch Fehlermeldungen im Protokoll gespeichert, aber nicht auf dem Bildschirm angezeigt werden.

Matt Fletcher
quelle
1

Möglicherweise müssen Sie der oben angegebenen Lösung kenorb Anführungszeichen hinzufügen:

ini_set('error_reporting', 'E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR');
Greg Lund-Chaix
quelle
Das ist falsch - das sind Konstanten, sie sollten nicht in Anführungszeichen gesetzt werden. error_reporting ist ein ganzzahliger Wert, der sich aus den Ganzzahlkonstanten OR zusammensetzt. Es ist keine Zeichenfolge, die aus konstanten Namen besteht, wie Sie es hier haben.
Datashaman
0

Dafür gibt es ein Modul:

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

Von der Projektseite:

Also kannst du

  • Haben Sie eine Sitebuilder-Rolle (oder sogar eine spezielle Debugger-Rolle), sehen Sie Fehler und Hinweise
  • Haben andere keine Fehler und Hinweise gesehen.
Geek-Merlin
quelle