這篇文章給大家分享的是有關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_function
register_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中異常錯誤怎么處理就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網頁題目:PHP中異常錯誤怎么處理-創新互聯
分享路徑:http://www.yijiale78.com/article18/disegp.html
成都網站建設公司_創新互聯,為您提供網站設計、動態網站、品牌網站制作、Google、微信小程序、網頁設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯