Wie kann man den Fehler von require () oder include () in PHP abfangen?

8

Ich schreibe ein Skript in PHP5, das den Code bestimmter Dateien benötigt. Wenn eine Datei für die Aufnahme nicht verfügbar ist, wird zuerst eine Warnung und dann ein schwerwiegender Fehler ausgelöst. Ich möchte eine eigene Fehlermeldung ausgeben, wenn der Code nicht eingefügt werden konnte. Ist es möglich einen letzten Befehl auszuführen, wenn das Require nicht funktioniert? Folgendes hat nicht funktioniert:

%Vor%

Wenn Sie alle Fehlermeldungen mit error_reporting(0) unterdrücken, erhalten Sie nur einen weißen Bildschirm, ohne error_reporting die PHP-Fehler zu verwenden, die ich nicht anzeigen möchte.

    
R_User 24.11.2011, 19:34
quelle

5 Antworten

11

Sie können dies erreichen, indem Sie set_error_handler in Verbindung mit ErrorException .

Das Beispiel von der ErrorException Seite ist:

%Vor%

Sobald Sie Fehler als Ausnahmen behandelt haben, können Sie Folgendes tun:

%Vor%     
Sjan Evardsson 31.12.2012 16:30
quelle
7

Ich benutze einfach 'file_exists ()':

%Vor%     
Nicholas Rezmerski 11.02.2015 21:48
quelle
3

Ein besserer Ansatz wäre, realpath zuerst auf dem Pfad zu verwenden. realpath gibt false zurück, wenn die Datei nicht existiert.

%Vor%

Sie können sogar Ihre eigene require-Funktion im Namespace Ihrer App erstellen, die die PHP-require-Funktion umschließt

%Vor%

Jetzt können Sie es überall in Ihren Dateien verwenden

%Vor%     
maček 24.11.2011 19:43
quelle
1

Ich würde vorschlagen, dass Sie sich den letzten Kommentar angesehen haben in der Dokumentation der Funktion set_error_handler () .

Es schlägt folgendes als eine Methode (und mit einem Beispiel) vor, fatale Fehler zu fangen:

%Vor%

Ich habe den Vorschlag nicht ausprobiert, aber dies könnte wahrscheinlich in anderen fatalen Fehlerszenarien verwendet werden.

    
Repox 24.11.2011 19:43
quelle
0

Sie müssen include () verwenden. Require () erzeugt, wenn es in einer nicht existierenden Datei verwendet wird, einen schwerwiegenden Fehler und beendet das Skript, so dass Ihr Die () nicht passieren wird. Include () gibt nur Warnungen aus und das Skript wird fortgesetzt.

    
Ondra Koupil 24.11.2011 20:12
quelle