In meinem Projekt, um alle PHP-Fehler abzufangen, habe ich meinen Fehlerbehandlungsmechanismus wie folgt eingerichtet:
error_reporting()
in index.php
datei gesetzt, die überschrieben wird
alles in der Datei php.ini
system/codeigniter/CodeIgniter.php
using gesetzt
set_error_handler
- Dieser Fehlerhandler, _exception_handler
, ist
gefunden in system/codeigniter/Common.php
_exception_handler
Funktion ignoriert E_STRICT
Fehler, ruft die
show_php_error
function Von der Systembibliothek Exceptions wenn der
Schweregrad ist der, der von Ihrer Funktion error_reporting()
in angegeben wird
index.php
und protokolliert den Fehler entsprechend dem, was Sie in Ihrer Datei config.php
FALSE
zurück, so dass PHP danach weiterarbeitet
Fehler, aber normalerweise würde es Ihrem error_reporting
Level entsprechen
und display_errors
Einstellung. Die Sache, die mich verwirrt, ist, dass E_ERROR
-Fehler, d. h. fatale Fehler, anscheinend nicht von _exception_handler
abgefangen werden. Es ist nicht so, dass show_php_error
nicht aufgerufen wird, es sieht so aus, als ob die Funktion gerade nicht für sie aufgerufen wird. Dies ist offensichtlich ein Problem, da es bedeutet, dass sie nicht von show_php_error
verarbeitet oder protokolliert werden. Zum Beispiel, wenn ich absichtlich $this->load->views('foo');
in einem Controller vertippt, wird der Handler nicht aufgerufen.
Jeder Vorschlag zur Fehlerbehandlung wird sehr geschätzt, danke!
Jetzt ist das eine ziemlich große Debatte: Ob Sie die fatalen Fehler abfangen sollten oder nicht. Einige sagen, dass sie FATAL sind, also wissen Sie nicht, in welchem Zustand das System ist, aber ich werde mit dem "versuchen, die Aufräumarbeiten zu machen, wenn der Fehler aufgetreten ist" gehen. Um alle schwerwiegenden Fehler zu erfassen, müssen Sie einen pre_system-Hook einrichten. Gehe zu application / config / hooks.php und gib
ein %Vor%Danach gehen Sie zu Hooks Verzeichnis und fügen Sie Ihre Behandlung des Fehlers:
%Vor%Wie Sie sehen können, verwenden wir die Funktion register_shutdown_function, um eine Funktion auszuführen, die prüft, ob ein Fehler aufgetreten ist und ob sie per E-Mail an den Entwickler gesendet wurde. Dieses Setup funktioniert seit über 2 Jahren einwandfrei in mehreren CI-Projekten, mit denen ich gearbeitet habe.
Ich habe diese Antwort unter einer anderen Frage gefunden ( Ссылка ), und ich denke, es ist auch nützlich für jeden, der das liest Frage. "Für die Codeigniter-spezifische Fehlerbehandlung können Sie die Klassenbibliothek 'Exception' überschreiben, indem Sie die Klasse My_Exception in Ihrem Ordner" applications / libraries "erstellen. Kopieren Sie die Signaturfunktionen der Originalbibliothek in diese und fügen Sie Ihren Code ein arbeiten. "
Tags und Links php codeigniter