Detaillierte Einführung in die Behandlung von Ausnahmefehlern in PHP

王林
Freigeben: 2023-04-07 09:06:02
nach vorne
2011 Leute haben es durchsucht

1. Fehlerberichtsebene error_reporting()

error_reporting(int $level);
Nach dem Login kopieren

PHP 5.4 und höher E_ALL enthält E_STRICT.

PHP-Handbuch Alle Fehlerstufen.

Beispiel:

<?php

// 关闭所有PHP错误报告
error_reporting(0);

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// 报告 E_NOTICE也挺好 (报告未初始化的变量
// 或者捕获变量名的错误拼写)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// 除了 E_NOTICE,报告其他所有错误
error_reporting(E_ALL ^ E_NOTICE);

// 报告所有 PHP 错误 (参见 changelog)
error_reporting(E_ALL);

// 报告所有 PHP 错误
error_reporting(-1);

// 和 error_reporting(E_ALL); 一样
ini_set(&#39;error_reporting&#39;, E_ALL);

?>
Nach dem Login kopieren

2. Fehlerbehandlungsfunktion set_error_handler()

set_error_handler(function (int $errno, string $errstr, string $errfile, int $errline) {
    // ...
}, $error_types = E_ALL)
Nach dem Login kopieren

angegeben durch das obige $ error_types Der Fehlertyp wird von der Fehlerbehandlungsfunktion abgefangen (es sei denn, die Funktion gibt false zurück)

Wenn in einer Anweisung mit dem Präfix @ ein Fehler auftritt, ist der $errno-Wert 0

Das Skript wird nach Beendigung der Verarbeitungsfunktion weiter ausgeführt (Sie müssen also bei Bedarf aktiv die() aufrufen)

Beispiel:

function handleError($level, $message, $file = &#39;&#39;, $line = 0)
{
    if (error_reporting() & $level) {
        throw new ErrorException($message, 0, $level, $file, $line);
    }
    return false;
}
Nach dem Login kopieren

Konvertierungsfehlerausnahmen

Hinweis: Nicht behandelbare Fehler

Die folgende Fehlerstufe kann nicht benutzerdefiniert sein Zu verarbeitende Funktion:

E_ERROR

<code><strong><span style="font-size: 14px;">E_PARSE</span></strong>

E_PARSE

<strong><span style="font-size: 14px;">E_CORE_ERROR</span></strong>

<code><strong><span style="font-size: 14px;">E_CORE_WARNING</span></strong>E_CORE_ERROR<span style="font-size: 14px;"></span>

<p id="1-错误报告级别-errorreporting" style="box-sizing: border-box; outline: 0px; margin: 8px 0px 16px; padding: 0px; font-size: 28px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(79, 79, 79); line-height: 36px; overflow-wrap: break-word; font-variant-ligatures: common-ligatures; white-space: normal; background-color: rgb(255, 255, 255);"><code><strong><span style="font-size: 14px;">E_COMPILE_ERROR</span></strong>E_CORE_WARNING

<strong><span style="font-size: 14px;">E_COMPILE_WARNING</span></strong>

set_error_handler() </span></strong>E_COMPILE_ERROR</p><p id="1-错误报告级别-errorreporting" style="box-sizing: border-box; outline: 0px; margin: 8px 0px 16px; padding: 0px; font-size: 28px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(79, 79, 79); line-height: 36px; overflow-wrap: break-word; font-variant-ligatures: common-ligatures; white-space: normal; background-color: rgb(255, 255, 255);"></span></strong>E_COMPILE_WARNING </p><p id="1-错误报告级别-errorreporting" style="box-sizing: border-box; outline: 0px; margin: 8px 0px 16px; padding: 0px; font-size: 28px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(79, 79, 79); line-height: 36px; overflow-wrap: break-word; font-variant-ligatures: common-ligatures; white-space: normal; background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"></span>Die meisten E_STRICT werden in der Datei generiert, in der die Funktion

aufgerufen wird. <🎜><🎜><🎜><🎜><🎜><🎜>Diese nicht erfassten Fehler können in register_shutdown_function() behandelt werden (das Skript wird jedoch trotzdem beendet) <🎜><🎜><🎜><🎜> <🎜 ><🎜><🎜><🎜><🎜>

3. 异常处理函数 set_exception_handler

// < PHP 7
set_exception_handler(&#39;handleException&#39;)


// < PHP 7
handleException(Exception $ex)
{
    echo "Uncaught exception: " , $ex->getMessage(), "\n";
}


// >= PHP 7
handleException(Throwable $ex)
{
    echo "Uncaught exception: " , $ex->getMessage(), "\n";
}
Nach dem Login kopieren

<span style="font-size: 14px;"></span>

在用户自定义异常处理函数内部, 可根据情况做一下处理:

日志记录错误

web 渲染错误页面

console 渲染错误提示

<span style="font-size: 14px;"></span>

4. PHP 中止时执行函数

<span style="font-size: 14px;">register_shutdown_function</span>

register_shutdown_function(function () {

}, $para1, $param2, ...)
Nach dem Login kopieren

在用户自定义脚本中止处理函数内部, 可根据情况做一下处理:

判断是否因严重错误而结束脚本(无法被 set_error_handler 捕获的错误中止脚本)

register_shutdown_function(&#39;handleShutdown&#39;)

function handleShutdown()
{
if (! is_null($error = error_get_last()) && isFatal($error[&#39;type&#39;])) {
      // handleException() 函数同时处理 set_exception_handler
      handleException(new \ErrorException(
        $error[&#39;message&#39;], $error[&#39;type&#39;], 0, $error[&#39;file&#39;], $error[&#39;line&#39;],
      ));
  }
}

function isFatal($type)
{
  return in_array($type, [E_COMPILE_ERROR, E_CORE_ERROR, E_ERROR, E_PARSE]);
}
Nach dem Login kopieren

<span style="font-size: 14px;"></span>

以下错误无法被 set_error_handler 捕获

E_ERROR

E_PARSE

E_CORE_ERROR

E_CORE_WARNING

E_COMPILE_ERROR

E_COMPILE_WARNING

若因为错误而结束脚本, 若是严重错误则可将其转为 异常类, 并由异常处理函数统一处理.

Note:

多次调用 register_shutdown_function 时不会互相覆盖, 而是会按照注册顺序被依次调用.

除非在某个注册的方法内部调用 exit()

Note:

进程被信号 SIGTERMSIGKILL 杀死时中止函数不会被调用. 可通过 pcntl_signal 捕获信号, 再在其中调用 exit() 来进行正常中止。

以上就是关于错误异常的处理,如有错误请指出。不胜感激!

更多相关问题请访问PHP中文网:PHP视频教程


<span style="font-size: 14px;"></span>

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die Behandlung von Ausnahmefehlern in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage