Home > Article > Backend Development > Detailed introduction to handling exception errors in PHP
1. Error reporting level error_reporting()
error_reporting(int $level);
PHP 5.4 and above E_ALL includes E_STRICT.
PHP Manual All error levels.
Example:
<?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('error_reporting', E_ALL); ?>
2. Error handling function set_error_handler()
set_error_handler(function (int $errno, string $errstr, string $errfile, int $errline) { // ... }, $error_types = E_ALL)
specified by the above $error_types The error type will be intercepted by the error handling function (unless the function returns false)
When an error occurs in a statement prefixed with @, the $errno value is 0
The script will continue to execute after the processing function ends (so you need to actively call die() if necessary)
Example:
function handleError($level, $message, $file = '', $line = 0) { if (error_reporting() & $level) { throw new ErrorException($message, 0, $level, $file, $line); } return false; }
Convert Error Exception
Note: Uncatchable Error
The following level errors cannot be user-defined Function to process:
E_ERROR
<strong>##E_PARSE<span style="font-size: 14px;"></span></strong>
<strong>E_CORE_ERROR<span style="font-size: 14px;"></span></strong>
##E_CORE_WARNING<strong><span style="font-size: 14px;"></span></strong>
<strong><span style="font-size: 14px;"></span></strong>
##E_COMPILE_ERROR<strong><span style="font-size: 14px;"></span></strong>
<strong><span style="font-size: 14px;"></span></strong>
Most E_STRICT generated in the file where the
function is called. These uncaught errors can be handled in register_shutdown_function() (but the script will still end)
3. 异常处理函数 set_exception_handler <span style="font-size: 14px;"></span> 在用户自定义异常处理函数内部, 可根据情况做一下处理: 日志记录错误 web 渲染错误页面 console 渲染错误提示 <span style="font-size: 14px;"></span> 4. PHP 中止时执行函数 在用户自定义脚本中止处理函数内部, 可根据情况做一下处理: 判断是否因严重错误而结束脚本(无法被 set_error_handler 捕获的错误中止脚本) 以下错误无法被 若因为错误而结束脚本, 若是严重错误则可将其转为 异常类, 并由异常处理函数统一处理. Note: 多次调用 除非在某个注册的方法内部调用 exit() Note: 进程被信号 以上就是关于错误异常的处理,如有错误请指出。不胜感激! 更多相关问题请访问PHP中文网:PHP视频教程 <span style="font-size: 14px;"></span>// < PHP 7
set_exception_handler('handleException')
// < PHP 7
handleException(Exception $ex)
{
echo "Uncaught exception: " , $ex->getMessage(), "\n";
}
// >= PHP 7
handleException(Throwable $ex)
{
echo "Uncaught exception: " , $ex->getMessage(), "\n";
}
<span style="font-size: 14px;">register_shutdown_function</span>
register_shutdown_function(function () {
}, $para1, $param2, ...)
register_shutdown_function('handleShutdown')
function handleShutdown()
{
if (! is_null($error = error_get_last()) && isFatal($error['type'])) {
// handleException() 函数同时处理 set_exception_handler
handleException(new \ErrorException(
$error['message'], $error['type'], 0, $error['file'], $error['line'],
));
}
}
function isFatal($type)
{
return in_array($type, [E_COMPILE_ERROR, E_CORE_ERROR, E_ERROR, E_PARSE]);
}
<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
register_shutdown_function
时不会互相覆盖, 而是会按照注册顺序被依次调用.SIGTERM
或 SIGKILL
杀死时中止函数不会被调用. 可通过 pcntl_signal
捕获信号, 再在其中调用 exit() 来进行正常中止。
The above is the detailed content of Detailed introduction to handling exception errors in PHP. For more information, please follow other related articles on the PHP Chinese website!