Fehlerbehandlung im Codeigniter

8

In meinem Projekt, um alle PHP-Fehler abzufangen, habe ich meinen Fehlerbehandlungsmechanismus wie folgt eingerichtet:

  1. Ich habe error_reporting() in index.php datei gesetzt, die überschrieben wird alles in der Datei php.ini
  2. Ein Fehlerhandler wird in system/codeigniter/CodeIgniter.php using gesetzt set_error_handler - Dieser Fehlerhandler, _exception_handler , ist gefunden in system/codeigniter/Common.php
  3. Die _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
  4. eingerichtet haben
  5. Der Handler gibt 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!

    
troy 08.02.2013, 17:47
quelle

2 Antworten

4

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.

    
tix3 15.02.2013, 20:45
quelle
0

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. "

    
Gergelin 19.09.2013 08:59
quelle

Tags und Links