25 Stimmen

Bester Weg zur Unterdrückung von php-Fehlern auf Produktionsservern

Was ist die beste Methode, um php-Fehler vor der Anzeige im Browser zu verstecken?

Wäre es möglich, das Folgende zu verwenden:

ini_set("display_errors", 1);

Auch Tipps zu bewährten Praktiken sind willkommen!

Ich protokolliere die Fehler, ich möchte nur sicherstellen, dass die Einstellung der display_errors Wert auf off (oder 0) nicht verhindern, dass Fehler protokolliert werden.

49voto

Vinko Vrsalovic Punkte 252104

Am besten ist es, die Fehler zu protokollieren, anstatt sie anzuzeigen oder zu ignorieren.

In diesem Beispiel werden die Fehler im Syslog protokolliert, anstatt sie im Browser anzuzeigen.

ini_set("display_errors", 0);
ini_set("log_errors", 1);

//Define where do you want the log to go, syslog or a file of your liking with
ini_set("error_log", "syslog"); // or ini_set("error_log", "/path/to/syslog/file");

3voto

grepsedawk Punkte 5861

Angenommen, Sie haben die Kontrolle über die php.ini-Datei, können Sie diese Änderungen global in dieser Datei vornehmen, anstatt den ini_set-Code in all Ihren php-Dateien herumliegen zu haben (was Sie vielleicht eines Tages vergessen, in eine Ihrer Dateien zu schreiben, was in der Produktion schlecht sein könnte).

3voto

Luis Melgratti Punkte 11491

Sie können auch apache .htaccess verwenden, um Fehler zu protokollieren, ohne Ihren Code zu verändern:

<IfModule mod_php5.c>
  php_flag      display_errors  Off
  php_flag      log_errors      On
  php_value     error_log       logs/errors
</IfModule>

2voto

farzad Punkte 8635

Setzen Sie eine Umgebungsvariable auf Ihrem Entwicklungsrechner. Dann können Sie Ihre Umgebung am Anfang Ihres Codes überprüfen, um sicherzustellen, dass Sie sich in der Entwicklungsumgebung befinden. dann können Sie mit der Funktion error_reporting() die Fehlerberichtsstufe von PHP einstellen.

if ( isset($_ENV['MY_APP_MODE']) && ($_ENV['MY_APP_MODE'] == 'devel') ) {
    error_reporting(E_ALL);
} else {
    error_reporting(0);
}

2voto

Magnus Punkte 14381

Die akzeptierte Antwort hat bei mir unter PHP 7.1 überhaupt nicht funktioniert.

Dies funktioniert in der Produktion wie erwartet, wobei Fehler in der bereitgestellten Datei protokolliert und dem Benutzer nicht angezeigt werden:

    ini_set('display_errors', 'Off');
    ini_set('log_errors', 'On');
    ini_set("error_log", "/absolute/path/to/my/error_log");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X