Heim Backend-Entwicklung PHP-Tutorial PHP的全局错误处理详解_PHP

PHP的全局错误处理详解_PHP

May 27, 2016 am 10:18 AM
php异常处理

本文目的

PHP的全局错误处理,在开发项目的时候很有用,可以帮助开发者快速定位一些问题,提高工作效率。默认情况下,全局错误会直接输出,但是最近开发时使用的一个框架库对全局错误处理进行了设定,导致很多错误信息没有输出,在定位问题上有一定的耗时。所以,研究了一下此库的实现,发现它设定了error_reporting和set_error_handler,导致此现象。现在记录一下这两个函数的用法,作为备忘录。

背景

PHP没有类型检测,开发人员比较容易输入错误单词,引起致命错误,最终导致脚本停止执行。如果这个时候,没有得到任何错误消息,那么会是一件很痛苦的事情。你不得不从脚本的第一行代码开始调试,在成千上万行的代码中不断的print或者echo,直到定位到这个输错的单词。然后,有不得不原路返回,将先前添加的print或echo全部删除。这时一件及其枯燥乏味的工作。

一般情况

正常情况下,php会将致命错误直接输出,会将错误的出处(文件地址,行号)和原因等输出,这样,开发着可以很方便的定位到问题。

但是有些时候,可能由于php.ini的设置问题,可能是第三方框架配置的问题,导致这些信息没有输出,那么此时,必须学会自己设置相关参数,输出这些错误信息,帮助快速定位问题。

error_reporting

error_reporting是一个php的全局配置参数,在php.ini中。用于配置错误输出级别,参数是比特位,可以用来设置错误输出的级别,下面是从php.ini中copy出来的信息:

; error_reporting is a bit-field. Or each number up to get desired error
; reporting level
; E_ALL - All errors and warnings (doesn't include E_STRICT)
; E_ERROR - fatal run-time errors
; E_RECOVERABLE_ERROR - almost fatal run-time errors
; E_WARNING - run-time warnings (non-fatal errors)
; E_PARSE - compile-time parse errors
; E_NOTICE - run-time notices (these are warnings which often result
; from a bug in your code, but it's possible that it was
; intentional (e.g., using an uninitialized variable and
; relying on the fact it's automatically initialized to an
; empty string)
; E_STRICT - run-time notices, enable to have PHP suggest changes
; to your code which will ensure the best interoperability
; and forward compatibility of your code
; E_CORE_ERROR - fatal errors that occur during PHP's initial startup
; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's
; initial startup
; E_COMPILE_ERROR - fatal compile-time errors
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
; E_USER_ERROR - user-generated error message
; E_USER_WARNING - user-generated warning message
; E_USER_NOTICE - user-generated notice message
;
; Examples:
;
; - Show all errors, except for notices and coding standards warnings
;
;error_reporting = E_ALL & ~E_NOTICE
;
; - Show all errors, except for notices
;
;error_reporting = E_ALL & ~E_NOTICE | E_STRICT
;
; - Show only errors
;
;error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
;
; - Show all errors except for notices and coding standards warnings
;
error_reporting = E_ALL & ~E_NOTICE

Nach dem Login kopieren

默认情况下,php会输出所有错误信息,除了notice。同样,php标准函数中提供了名称相同的函数error_reporting(int $level),用于在php脚本中,完成同样的功能。这样将不会影响其他程序。值得注意的是,$level为0的时候是关闭错误输出,也就是任何错误都不会输出。

set_error_handler

php的默认错误处理是将消息输出。但是,有时候需要定义一些其他操作,这时就需要自定义错误处理函数。php提供内置函数set_error_handler可以帮助我们注册自己的错误处理函数。函数原型如下:

mixed set_error_handler ( callback $error_handler [, int $error_types = E_ALL | E_STRICT ] )

值得注意的是,即使注册了错误处理函数,默认的行为仍然会执行,也就是错误出现时,仍然会输出错误信息,所以需要在程序中显示的将错误级别设置为0,然后在注册自己的的错误处理函数。这种方式,在生产环境下,尤其重要,因为即时出错,敏感内部错误信息也不会暴露给潜在的恶意用户。还有很重要的一点需要指出,自定义错误处理函数不能处理fatal error(比如编译错误)。下面是一个使用自定义错误处理函数的列子:

<&#63;php
error_reporting (0);
function error_handler ($error_level, $error_message, $file, $line) {
  $EXIT = FALSE;
  switch ($error_level) {
    case E_NOTICE:
    case E_USER_NOTICE:
      $error_type = 'Notice';
      break;
    case E_WARNING:
    case E_USER_WARNING:
      $error_type = 'Warning';
      break;
    case E_ERROR:
    case E_USER_ERROR:
      $error_type = 'Fatal Error';
      $EXIT = TRUE;
      break;
    default:
      $error_type = 'Unknown';
      $EXIT = TRUE;
      break;
  }
  printf ("%s: %s in %s on line %d\n", $error_type, $error_message, $file, $line);
 
  if ($EXIT) {
    die();
  }
}
set_error_handler ('error_handler');
 
//new NonExist();
echo $novar;
echo 3/0;
trigger_error ('Trigger a fatal error', E_USER_ERROR);
new NonExist();
&#63;>
Nach dem Login kopieren

执行此脚本可以得到下面的输出:

Notice: Undefined variable: novar in /your/php_demo_file.php on line 40

Warning: Division by zero in /your/php_demo_file.php on line 41

Fatal Error: Trigger a fatal error in /your/php_demo_file.php on line 42

Nach dem Login kopieren

可以看到,最后的“new NoExistClass()”的异常,没有被自定义的错误处理函数捕获。

最后,捎带提一下,set_exception_handler注册顶层的异常处理,在web一用中,可以设定一下,然后统一的跳转到错误处理页面。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Schwerwiegender PHP-Fehler: Nicht abgefangene Ausnahmelösung „Exception'. Schwerwiegender PHP-Fehler: Nicht abgefangene Ausnahmelösung „Exception'. Aug 18, 2023 pm 03:28 PM

PHP ist eine weit verbreitete serverseitige Programmiersprache, die Websites leistungsstarke und dynamische Funktionen bietet. In der Praxis können Entwickler jedoch auf eine Vielzahl von Fehlern und Ausnahmen stoßen. Einer der häufigsten Fehler ist PHPFatalerror:UncaughtException'Exception'. In diesem Artikel untersuchen wir die Ursachen dieses Fehlers und wie man ihn beheben kann. Das Konzept der Ausnahme In PHP bezieht sich eine Ausnahme auf die unerwartete Situation, die während des laufenden Prozesses des Programms auftritt und dazu führt

Tipps zur PHP-Ausnahmebehandlung: So fangen und behandeln Sie mehrere Ausnahmen mit try...catch-Blöcken Tipps zur PHP-Ausnahmebehandlung: So fangen und behandeln Sie mehrere Ausnahmen mit try...catch-Blöcken Jul 29, 2023 pm 01:05 PM

Tipps zur PHP-Ausnahmebehandlung: So verwenden Sie try...catch-Blöcke, um mehrere Ausnahmen abzufangen und zu behandeln. Einführung: Bei der PHP-Anwendungsentwicklung ist die Ausnahmebehandlung ein sehr wichtiger Teil. Wenn im Code ein Fehler oder eine Ausnahme auftritt, kann eine angemessene Ausnahmebehandlung die Robustheit und Zuverlässigkeit des Programms verbessern. In diesem Artikel wird erläutert, wie Sie mit dem try...catch-Block mehrere Ausnahmen erfassen und behandeln können, um Entwicklern eine flexiblere und effizientere Ausnahmebehandlung zu ermöglichen. Einführung in die Ausnahmebehandlung. Ausnahmen beziehen sich auf Fehler oder Sondersituationen, die bei der Ausführung eines Programms auftreten. Wenn eine Ausnahme auftritt

Best Practices für die Ausnahmeklassifizierung in PHP-Programmen Best Practices für die Ausnahmeklassifizierung in PHP-Programmen Jun 06, 2023 am 08:01 AM

Beim Schreiben von PHP-Code ist die Ausnahmebehandlung ein wesentlicher Bestandteil, um den Code robuster und wartbarer zu machen. Allerdings muss auch die Ausnahmebehandlung mit Vorsicht angewendet werden, da sie sonst zu weiteren Problemen führen kann. In diesem Artikel werde ich einige Best Practices für die Ausnahmeklassifizierung in PHP-Programmen vorstellen, damit Sie die Ausnahmebehandlung besser nutzen und die Codequalität verbessern können. Das Konzept der Ausnahme In PHP bezieht sich eine Ausnahme auf einen Fehler oder eine unerwartete Situation, die auftritt, wenn das Programm ausgeführt wird. Normalerweise führen Ausnahmen dazu, dass das Programm nicht mehr ausgeführt wird und eine Ausnahmemeldung ausgegeben wird.

Wie können Sie mit Ausnahmen in PHP effektiv umgehen (versuchen Sie, schließlich zu werfen)? Wie können Sie mit Ausnahmen in PHP effektiv umgehen (versuchen Sie, schließlich zu werfen)? Apr 05, 2025 am 12:03 AM

In PHP wird das Ausnahmebehandlung durch den Versuch, Fang, schließlich und werfen Keywords erreicht. 1) Der Try -Block umgibt den Code, der Ausnahmen auslösen kann. 2) Der Catch -Block behandelt Ausnahmen; 3) Block stellt schließlich sicher, dass der Code immer ausgeführt wird. 4) Wurf wird verwendet, um Ausnahmen manuell zu werfen. Diese Mechanismen verbessern die Robustheit und Wartbarkeit Ihres Codes.

Möglichkeiten zur Verwendung von PHP-Ausnahme- und Fehlertoleranzmechanismen? Möglichkeiten zur Verwendung von PHP-Ausnahme- und Fehlertoleranzmechanismen? Jun 30, 2023 am 10:13 AM

Wie verwende ich den Ausnahmebehandlungs- und Fehlertoleranzmechanismus von PHP? Einführung: Bei der PHP-Programmierung sind Ausnahmebehandlungs- und Fehlertoleranzmechanismen sehr wichtig. Wenn während der Codeausführung Fehler oder Ausnahmen auftreten, können diese Fehler mithilfe der Ausnahmebehandlung erfasst und behandelt werden, um die Stabilität und Zuverlässigkeit des Programms sicherzustellen. In diesem Artikel wird erläutert, wie Sie den Ausnahmebehandlungs- und Fehlertoleranzmechanismus von PHP verwenden. 1. Grundkenntnisse der Ausnahmebehandlung: Was ist eine Ausnahme? Ausnahmen sind Fehler oder ungewöhnliche Bedingungen, die während der Codeausführung auftreten, einschließlich Syntaxfehler, Laufzeitfehler, Logikfehler usw. Wenn anders

Wie implementiert man eine globale Ausnahmebehandlung in der PHP-Backend-Funktionsentwicklung? Wie implementiert man eine globale Ausnahmebehandlung in der PHP-Backend-Funktionsentwicklung? Aug 05, 2023 pm 03:36 PM

Wie implementiert man eine globale Ausnahmebehandlung in der PHP-Backend-Funktionsentwicklung? Bei der PHP-Backend-Entwicklung ist die Ausnahmebehandlung ein sehr wichtiger Teil. Es kann uns helfen, Fehler im Programm zu erkennen und angemessen zu behandeln, wodurch die Systemstabilität und -leistung verbessert wird. In diesem Artikel wird die Implementierung der globalen Ausnahmebehandlung in der PHP-Back-End-Funktionsentwicklung vorgestellt und entsprechende Codebeispiele bereitgestellt. PHP bietet einen Ausnahmebehandlungsmechanismus, um Ausnahmen abzufangen und sie entsprechend über die Schlüsselwörter „try“ und „catch“ zu behandeln. Die globale Ausnahmebehandlung bezieht sich auf alle

Umgang mit Datenausnahmen und Fehlerbehandlungsstrategien bei der Implementierung von APIs in PHP Umgang mit Datenausnahmen und Fehlerbehandlungsstrategien bei der Implementierung von APIs in PHP Jun 17, 2023 am 08:12 AM

Da die Verwendung von APIs immer weiter verbreitet wird, müssen wir bei der Entwicklung und Verwendung von APIs auch Strategien zur Behandlung von Datenausnahmen und Fehlern berücksichtigen. In diesem Artikel wird untersucht, wie PHP diese Probleme bei der Implementierung von APIs behandelt. 1. Umgang mit Datenanomalien Es kann viele Gründe für Datenanomalien geben, wie z. B. Benutzereingabefehler, Netzwerkübertragungsfehler, interne Serverfehler usw. Bei der Entwicklung in PHP können wir die folgenden Methoden verwenden, um Datenausnahmen zu behandeln. Geben Sie den entsprechenden HTTP-Statuscode zurück. Das HTTP-Protokoll definiert viele Statuscodes, die uns helfen können

PHP-Zeitverarbeitungsausnahme: Fehler bei der Rückgabe der Zeit PHP-Zeitverarbeitungsausnahme: Fehler bei der Rückgabe der Zeit Mar 28, 2024 pm 01:51 PM

PHP-Zeitverarbeitungsausnahme: Fehler bei der Rückgabe der Zeit, spezifische Codebeispiele sind erforderlich. In der Webentwicklung ist die Zeitverarbeitung eine sehr häufige Anforderung. Als häufig verwendete serverseitige Skriptsprache bietet PHP eine Fülle von Zeitverarbeitungsfunktionen und -methoden. In praktischen Anwendungen kommt es jedoch manchmal zu ungewöhnlichen Situationen, in denen die Rückkehrzeit falsch ist, was durch Fehler im Code oder unsachgemäße Verwendung verursacht werden kann. In diesem Artikel stellen wir einige häufige Situationen vor, die zu Rückkehrzeitfehlern führen können, und stellen einige spezifische Codebeispiele bereit, um den Lesern das Verständnis zu erleichtern

See all articles