Frage Alle Fehler abfangen und auf Seite mit PHP umleiten


Gibt es einen Weg, Php generell zu sagen, dass es bei fatalen Fehlern auf eine bestimmte Seite umleiten soll?

Angenommen, ich habe eine Website mit vielen verschiedenen Dateien, und ich möchte Probleme ausblenden (während ich sie noch protokolliere) und den Benutzer auf die gleiche Fehlerseite verweisen, egal, um welchen Fehler es sich handelt oder auf welcher Seite sie sich befinden.

Lassen Sie uns einfach so argumentieren, dass ich die Fehler nicht sehen möchte, und die Seiten werden ständig von Robotern bearbeitet und aktualisiert, die bei jeder 23. oder 51. Seite Fehler verursachen.

Ich suche nach etwas, das vielleicht die php.ini-Datei oder htaccess betrifft, etwas, das ich siteweit machen kann.


10
2017-11-22 11:20


Ursprung


Antworten:


Sie können die Standardseite mit 500 Fehlern in Apache mit der Anweisung 'ErrorDocument' ändern:

ErrorDocument 500 /500.html

Dies leitet einen 500 Internal Server-Fehler zu 500.html um. Sie können dort auch eine PHP-Seite verwenden und die verweisende Seite mailen.

Um die Fehler abzufangen, können Sie diese in einer error.log-Datei protokollieren. Verwenden Sie die folgenden zwei Anweisungen in Ihrer php.ini-Datei:

error_log = /var/log/httpd/error_php  
log_errors = On  

Vergiss nicht Apache neu zu starten.


5
2017-11-22 11:30



Sehen set_error_handler:

set_error_handler - setzt a   benutzerdefinierte Fehlerhandler-Funktion

Rudimentäres Beispiel:

<?php

function errorHandler($n, $m, $f, $l) {
    header('Location: http://example.com/error.php');
}

set_error_handler('errorHandler');
...
?>

9
2017-11-22 11:27



Ändern Sie zunächst Ihre php.ini, um Fehlermeldungen zu unterdrücken und die Protokollierung zu aktivieren:

 display_errors=Off
 log_errors=On
 error_log=whatever/path

Schreibe einen Fehlerhandler (anders als set_error_handler, diese fängt auch Fatals)

register_shutdown_function('errorHandler');
function errorHandler() {
   $err = error_get_last();
   if($err)
     include "error_page.php"; // your custom error page
}

Fügen Sie diesen Code in eine Datei ein und teilen Sie php mit, dass er sie bei jedem Request einbinden soll (siehe auto_prepend_file @ http://php.net/manual/en/ini.core.php)


5
2017-11-22 12:43