Fehler sind das häufigste Ereignis, mit dem ein Entwickler beim Programmieren ausgesetzt ist. Fehler können als syntaktisch, laufend oder logisch eingestuft werden: Das Semikolon am Ende einer Anweisung ist ein Beispiel für einen Syntaxfehler. Der Versuch, eine Verbindung zu einer Datenbank herzustellen, wenn der Server sinkt, ist ein Beispiel für einen Laufzeitfehler. Die Bereitstellung falscher Daten für eine Variable ist ein Beispiel für einen Logikfehler. Um die Anzahl der Fehler in Ihrem Code zu verringern und deren Effekte zu mildern, ist die ordnungsgemäße Fehlerbehandlung in Ihrer Webanwendung unerlässlich.
Dieser Artikel ist ein Crashkurs in der PHP -Fehlerbehandlung. Sie erfahren über die integrierten Fehlerberichterstattung von PHP und die Umgang mit Fehlern mit benutzerdefinierten Fehlerhandlern und Ausnahmebehandlung.
Key Takeaways
- PHP -Fehlerbehandlung ist entscheidend für die Aufrechterhaltung der Integrität und Funktionalität einer Webanwendung. Es hilft bei der Identifizierung und Behebung von Problemen, die während der Skriptausführung auftreten können, und verbessert die Benutzererfahrung, indem sie kontrollieren, was sie sehen, wenn ein Fehler auftritt.
- PHP bietet mehrere integrierte Funktionen für die Fehlerbehandlung, einschließlich Protokollierung und Anzeige. Es bietet auch Flexibilität, Fehlerbehandlungsstrategien durch Registrieren von Fehlerhandlern und Verwendung von Ausnahmen anzupassen.
- Benutzerdefinierte Fehlerbehandlung in PHP kann mit set_error_handler () und set_exception_handler () Funktionen erreicht werden. Diese ermöglichen es Entwicklern, benutzerdefinierte Regeln und Ausnahmen für Fehlerbehandlungen zu definieren.
Ausnahmen in PHP sind Ereignisse, die während der Skriptausführung auftreten und den normalen Anweisungsfluss stören. Sie können mit Try, Fang und schließlich blockiert werden. Wenn bei einer Ausnahme kein Fangblock gefunden wird, zeigt PHP einen tödlichen Fehler an und keine Ausführung des Skripts. -
PHP -Fehlerberichterstattungsstufen
Alle Fehler und Warnungen sollten protokolliert werden. Basierend auf dem Schweregrad eines Fehlers sollten Benachrichtigungen an andere Systeme/Teams gesendet werden. Damit Sie den Schweregrad besser messen können, liefert PHP mehrere integrierte Fehlerstufen, um die Art eines Fehlers zu beschreiben. Jede Ebene wird durch einen Ganzzahlwert und als Konstant dargestellt, der vom Programmierer verwendet werden kann. Die folgende Tabelle stammt aus der offiziellen PHP -Dokumentation und zeigt einige der verschiedenen Ebenen.
Die Ebenen können zusammen mit Bit-Operatoren maskiert werden, um sie von der PHP-Konfiguration einzubeziehen oder zu subtrahieren. Zum Beispiel ermöglicht E_all | e_strict alle Fehler und Warnungen mit der Zugabe von e_strict (notwendig in Versionen von PHP vor 5.4).
PHP bietet einige Konfigurationsanweisungen zur Protokollierung und Anzeigefehler. Ihre Werte unterscheiden sich im Allgemeinen, je nachdem, ob sich das System in einer Entwicklung oder in einer Produktionsumgebung befindet. Diese Tabelle zeigt einige der fehlerbezogenen Richtlinien.
Die Konfigurationsanweisungen können entweder in php.ini, in einer Webserverkonfigurationsdatei (httpd.conf oder .htaccess-Datei) oder zur Laufzeit in Ihrem Skript mit der Funktion ini_set () festgelegt werden. Lesen Sie die Dokumentation, um weitere Informationen zu den Richtlinien und wie/wo sie festlegen soll.
Erstellen Sie benutzerdefinierte Fehlerhandler
Es ist auch eine gute Praxis, den Endbenutzer keine Rohfehler anzuzeigen. Fehler, die angezeigt werden, sollten mit freundlichen, benutzerdefinierten Fehlermeldungen abstrahiert werden. PHP bietet nicht nur integrierte Funktionen für die Protokollierung und Anzeige von Fehlern, sondern auch für die Erhöhung. Sie können einen Fehler einer bestimmten Ebene mit Trigger_error () pragmatisch auslösen. Dieser Code löst beispielsweise eine e_user_notice -Warnung aus, wenn der Wert von $ test größer als 1 ist:
<span><span><?php
</span></span><span><span>$test = 5;
</span></span><span><span>if ($test > 1) {
</span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE);
</span></span><span><span>}</span></span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Auslösen von Fehlern mit Trigger_Error () ist nützlich, wenn Sie eine fehlerhafte Infrastruktur vorhanden haben, sodass Sie die Behandlung von benutzerdefinierten Fehlern und die von PHP aufgeworfenen Fehler und Warnungen vereinen können.
Wenn Sie kundenspezifische Fehlerbehandlungsstrategien wie das Senden einer E -Mail oder Protokollierungsfehler an eine Datenbank basierend auf ihrem Schweregrad implementieren möchten, müssen Sie benutzerdefinierte Fehlerhandler mithilfe von set_error_handler () definieren. Die Funktion akzeptiert zwei Argumente: eine Rückruffunktion oder eine statische Methode, die beim Anheben des Fehlers aufgerufen wird, und optional die Fehlerstufe mit der Funktion/Methode. Die Unterschrift des Rückrufs lautet:
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Schauen wir uns eine benutzerdefinierte Fehlerbehandlungsfunktion an. Das folgende Beispiel erfasst Fehler in einer Datenbank -Datenbank, wenn einer auftritt:
<span><span><?php
</span></span><span><span>$test = 5;
</span></span><span><span>if ($test > 1) {
</span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE);
</span></span><span><span>}</span></span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Der obige Snippet registriert einen Fehlerhandler, der Folgendes ausführt: Wenn nicht tödliche Fehler auftreten, wird ein Datensatz in die Datenbank eingefügt, anstatt den Fehler anzuzeigen und ihn an einer Datei zu protokollieren. Wenn ein tödlicher Fehler auftritt, wird er in der Datenbank protokolliert und Ihr Skript beendet.
Es gibt jedoch einige Einschränkungen bei benutzerdefinierten Fehlerhandlern, die Sie kennen sollten. Der Fehlerhandler umgeht das Standardverhalten von PHP, sodass in Ihrem Handler selbst Fehler umgehen können. Für den Fall, dass der Datenbankserver beispielsweise sinkt, würde die obige Funktion das Protokoll nicht aufzeichnen. Außerdem kann der Fehlerhandler bestimmte interne Fehler nicht wie e_core_error und e_compile_error oder e_strict in derselben Datei, in der der Handler definiert ist, definiert, da diese Fehler auftreten, bevor der Handler die Chance hat, registriert zu werden.
Handhabungsfehler unter Verwendung von Ausnahmen
So gut wie ein Fehler zur Handhabung des Fehlers, das Sie vorhanden haben, es wird immer Probleme zur Laufzeit geben. Natürlich möchten Sie nicht, dass diese Fehler im Browser des Benutzers angezeigt werden. Hier tritt das Bild mit Ausnahme in das Bild ein. Mit Ausnahmen können Sie Fehler und außergewöhnliche Situationen anmutig behandeln.
Ausnahmen werden in PHP von der Klasse Excpetion (oder einer seiner Unterklassen) dargestellt. Sie können mit Wurf angehoben werden und können mit einem Try/Catch -Block erwischt werden. Sie können die Ausnahme erweitern, um benutzerdefinierte Ausnahmetypen zum Einfangen bestimmter Fehler zu erstellen.
Der Code, der eine Ausnahme auslösen kann, wird in den Try -Block platziert, und der Code für die Ausnahme wird im Catch -Block platziert. Betrachten Sie den folgenden Ausschnitt:
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Wenn eine Ausnahme durch die fiktive Methode getDatafromService () ausgelöst wird, wird sie im Catch -Block gefangen und eine Nachricht wird angezeigt. Wenn GetDatafromService () erfolgreich ausgeführt wird, wird der Fluss über den Fangblock hinweggeführt und durch den Rest des Skripts fortgesetzt. Alle Ausnahmen, die geworfen und nicht gefangen werden, generieren einen E_Fatal -Fehler mit der Nachricht „Uncornt Exception“.
Die Ausnahmeklasse bietet sechs verschiedene Methoden, um auf Informationen darüber zuzugreifen, was das Problem verursacht hat, wie in der folgenden Tabelle gezeigt.
Erstellen eines benutzerdefinierten Ausnahmebehandlers
Mit PHP können Sie jedes Objekt so werfen, als wäre es eine Ausnahme, aber als Faustregel sollte die Ausnahme die integrierte Ausnahmeklasse von PHP erweitern. Basierend auf dem Typ des Objekts können Sie die Ausnahmen unterschiedlich verarbeiten. Die benutzerdefinierte Ausnahmebehandlung kann geeignete Aktionen wie Protokollierungsfehlermeldungen in der Datei ausführen, genau Details zur Zeile, in der der Fehler aufgetreten ist, indem der aufrufende Stapel usw. untersucht wird. Sehen Sie sich dieses Beispiel an:
<span><span><?php
</span></span><span><span>$test = 5;
</span></span><span><span>if ($test > 1) {
</span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE);
</span></span><span><span>}</span></span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Der obige Code definiert zwei neue benutzerdefinierte Ausnahmetypen, NameException
und E -MailException, mit der unterschiedliche Fehler angezeigt werden können. Innerhalb des Try -Blocks prüft die Code, wenn Werte für den Variablen $ -Namen und $ E -Mail geliefert wurden. Wenn beide leer sind, wird die entsprechende Ausnahme mit Wurf ausgelöst. Der entsprechende Fangblock wird ausgeführt, wodurch der Fehler behandelt wird.
Nachschläge von Ausnahmen
Versuchen Sie/Fangblöcke können verschachtelt werden. Manchmal möchten Sie eine Ausnahme aufnehmen, einige seiner Eigenschaften ansehen und dann erneut werfen, damit ein Elternblock ihn erledigen lassen. Dies kann häufig nützlich sein, um eine Fehlerbedingung zu überprüfen und zu entscheiden, ob er tödlich sein sollte oder nicht. Dieser Beispielcode zeigt eine Ausnahme:
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
ungewolltes Ausnahmebehandler
Ähnlich wie set_error_handler () ermöglicht es Ihnen, eine Funktion anzugeben, um Laufzeitfehler zu verarbeiten, mit der Funktion set_exception_handler () können Sie Ausnahmen verarbeiten, die den Anrufstapel nach oben schaffen, ohne von Fangblöcken gefangen zu werden. Wenn eine Ausnahme beispielsweise Ihren Stapel ganz hinauf macht, wäre es eine gute Idee, sie in einer Protokolldatei zu protokollieren. Sie können eine Rückruffunktion erstellen und mit set_exception_handler () registrieren, wie im folgenden Beispiel gezeigt.
<span><span><?php
</span></span><span><span>function errorHandler($errno, $errstr, $errfile, $errline) {
</span></span><span> <span>static $db;
</span></span><span> <span>if (empty($db)) {
</span></span><span> <span>$db = new PDO(DSN, DBUSER, DBPASS);
</span></span><span> <span>}
</span></span><span>
</span><span> <span>$query = "INSERT INTO errorlog (severity, message, filename, lineno, time) VALUES (?, ?, ?, ?, NOW())";
</span></span><span> <span>$stmt = $db->prepare($query);
</span></span><span>
</span><span> <span>switch ($errno) {
</span></span><span> <span>case E_NOTICE:
</span></span><span> <span>case E_USER_NOTICE:
</span></span><span> <span>case E_DEPRECATED:
</span></span><span> <span>case E_USER_DEPRECATED:
</span></span><span> <span>case E_STRICT:
</span></span><span> <span>$stmt->execute(array("NOTICE", $errstr, $errfile, $errline));
</span></span><span> <span>break;
</span></span><span>
</span><span> <span>case E_WARNING:
</span></span><span> <span>case E_USER_WARNING:
</span></span><span> <span>$stmt->execute(array("WARNING", $errstr, $errfile, $errline));
</span></span><span> <span>break;
</span></span><span>
</span><span> <span>case E_ERROR:
</span></span><span> <span>case E_USER_ERROR:
</span></span><span> <span>$stmt->execute(array("FATAL", $errstr, $errfile, $errline));
</span></span><span> <span>exit("FATAL error <span><span>$errstr</span> at <span>$errfile</span>:<span>$errline</span>"</span>);
</span></span><span>
</span><span> <span>default:
</span></span><span> <span>exit("Unknown error at <span><span>$errfile</span>:<span>$errline</span>"</span>);
</span></span><span> <span>}
</span></span><span><span>}
</span></span><span>
</span><span><span>set_error_handler("errorHandler");
</span></span><span>
</span><span><span>$test = 5;
</span></span><span><span>if ($test > 1) {
</span></span><span> <span>trigger_error("Value of <span><span>$test</span> must be 1 or less"</span>, E_USER_NOTICE);
</span></span><span><span>}</span></span>
Nach dem Login kopieren
Zusammenfassung
PHP bietet eine Vielzahl integrierter Funktionen für die Handhabungsfehlerbedingungen, einschließlich Protokollierung und Anzeige. Es bietet Ihnen auch die Flexibilität, Ihre Fehlerbehandlungsstrategien durch Registrieren von Fehlerhandlern und Verwendung von Ausnahmen anzupassen. Fehler sind eine Tatsache des Lebens, aber hoffentlich helfen Ihnen die Informationen, die ich in diesem Artikel präsentierte, Ihnen dabei, sie anmutiger umzugehen.
Bild über Ilya Andriyanov / Shutterstock
häufig gestellte Fragen (FAQs) zur Fehlerbehandlung in PHP
Was ist die Bedeutung der Fehlerbehandlung in PHP? Es hilft Entwicklern, Probleme zu identifizieren und zu beheben, die sich während der Ausführung eines Skripts ergeben können. Ohne ordnungsgemäße Fehlerbehandlung kann ein kleines Problem erhebliche Probleme verursachen, z. Es verbessert auch die Benutzererfahrung, da Entwickler steuern können, was der Benutzer sieht, wenn ein Fehler auftritt, anstatt verwirrende Fehlermeldungen anzuzeigen.
Wie handelt es sich bei PHP standardmäßig mit Fehlern? Dieses Verhalten ist nicht ideal für eine Live -Website, da es dem Benutzer vertrauliche Informationen anzeigen kann. Daher wird empfohlen, die Standardeinstellungen für Fehlerbehandlungen für eine Live -Website zu ändern. Fatale Fehler sind kritische Fehler, z. B. eine nicht existierende Funktion oder das Schreiben in eine Datei, die nicht beschreibbar ist. Warnungen sind nicht tödliche Fehler, mit denen das Skript weiter ausgeführt werden kann. Analysefehler treten auf, wenn im Skript ein Syntaxfehler vorhanden ist. Bekanntmachungen sind kleinere oder mögliche Fehler, die PHP beim Ausführen eines Skripts begegnen. Mit diesen Funktionen können Sie die benutzerdefinierten Fehler und Ausnahmen für Fehlerbehandlungen definieren. Sie können eine benutzerdefinierte Funktion angeben, um Fehler zu verarbeiten, die zum Abmelden von Fehlern oder zum Senden von Fehlerbenachrichtigungen nützlich sein können.
Was ist eine Ausnahme in PHP? Wenn eine Ausnahme ausgelöst wird, hört PHP auf, das Skript auszuführen und nach einem Fangblock zu suchen, um die Ausnahme zu behandeln. Wenn kein Catch -Block gefunden wird, zeigt PHP einen tödlichen Fehler an und stoppt nicht mehr das Skript auszuführen.
Wie kann ich Ausnahmen in PHP? Der Try -Block enthält den Code, der eine Ausnahme ausgeben kann. Der Fangblock enthält den Code, um die Ausnahme zu behandeln. Der schließlich enthält der Code, der ausgeführt wird, unabhängig davon, ob eine Ausnahme ausgelöst wurde oder nicht. Fehler werden von der PHP -Engine behandelt und können mithilfe von Fehlerberichterstattungseinstellungen und benutzerdefinierten Fehlerhandlern gesteuert werden. Ausnahmen werden dagegen vom Skript behandelt und können mit Try, Fang und schließlich blockiert werden.
Wie kann ich die Fehlerberichterstattung in PHP? Das Ausschalten der Fehlerberichterstattung wird jedoch für eine Live -Website nicht empfohlen, da es schwierig ist, Probleme zu identifizieren und zu beheben. Bei Vorbereitung auf einen Ausdruck in PHP werden alle Fehlermeldungen, die durch diesen Ausdruck erzeugt werden, ignoriert.
Wie kann ich Fehler in PHP protokollieren? Diese Funktion kann nützlich sein, um Fehler und Debuggen zu verfolgen. Sie können PHP auch so konfigurieren, dass alle Fehler protokolliert werden, indem Sie die Anweisung log_errors in der Datei php.ini ändern.
Das obige ist der detaillierte Inhalt vonphpmaster | Fehlerbehandlung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!