php 异常错误信息用处,关于PHP中异常错误的处理详细介绍
1. 錯誤報告級別 error_reporting()error_reporting(int $level);
PHP 5.4 及以上 E_ALL 包含了 E_STRICT。
PHP Manual 所有的錯誤級別。
范例:<?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. 錯誤處理函數 set_error_handler()set_error_handler(function (int $errno, string $errstr, string $errfile, int $errline) {
// ...
}, $error_types = E_ALL)
上述 $error_types 指定的錯誤類型會被該錯誤處理函數攔截 ( 除非該函數返回了 false)
帶 @ 前綴的語句發生錯誤時, $errno 值為 0
腳本會在該處理函數結束后繼續執行 (因此必要時需主動調用 die() )
范例:function handleError($level, $message, $file = '', $line = 0)
{
if (error_reporting() & $level) {
throw new ErrorException($message, 0, $level, $file, $line);
}
return false;
}
將 錯誤 轉換為 異常
注意: 無法捕獲的錯誤
以下級別的錯誤不能由用戶定義的函數來處理:
E_ERROR
E_PARSE
E_CORE_ERROR
E_CORE_WARNING
E_COMPILE_ERROR
E_COMPILE_WARNING
在 調用 set_error_handler()函數所在文件中產生的大多數 E_STRICT。
這些無法捕獲的錯誤, 可在 register_shutdown_function() 中處理( 但腳本仍會結束 )
3. 異常處理函數 set_exception_handler// < 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";
}
在用戶自定義異常處理函數內部, 可根據情況做一下處理:
日志記錄錯誤
web 渲染錯誤頁面
console 渲染錯誤提示
4. PHP 中止時執行函數
register_shutdown_functionregister_shutdown_function(function () {
}, $para1, $param2, ...)
在用戶自定義腳本中止處理函數內部, 可根據情況做一下處理:
判斷是否因嚴重錯誤而結束腳本(無法被 set_error_handler 捕獲的錯誤中止腳本)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]);
}
以下錯誤無法被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:
進程被信號 SIGTERM 或 SIGKILL 殺死時中止函數不會被調用. 可通過pcntl_signal捕獲信號, 再在其中調用 exit() 來進行正常中止。
以上就是關于錯誤異常的處理,如有錯誤請指出。不勝感激!
更多相關問題請訪問PHP中文網:PHP視頻教程
總結
以上是生活随笔為你收集整理的php 异常错误信息用处,关于PHP中异常错误的处理详细介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java kryo register_j
- 下一篇: 白金信用卡年费多少 免年费政策帮你省钱