中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中異常錯誤怎么處理

發布時間:2020-10-14 15:48:19 來源:億速云 閱讀:155 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關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:

進程被信號 SIGTERMSIGKILL 殺死時中止函數不會被調用. 可通過 pcntl_signal 捕獲信號, 再在其中調用 exit() 來進行正常中止。

感謝各位的閱讀!關于PHP中異常錯誤怎么處理就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

赤水市| 灵石县| 祁连县| 建昌县| 建平县| 措勤县| 大渡口区| 石门县| 横峰县| 延吉市| 潍坊市| 云林县| 广州市| 墨江| 文成县| 中卫市| 十堰市| 崇信县| 保德县| 临安市| 桐柏县| 长沙市| 神农架林区| 习水县| 安多县| 织金县| 南溪县| 泽库县| 攀枝花市| 佛坪县| 墨玉县| 东城区| 清徐县| 昭苏县| 合作市| 仁寿县| 鸡东县| 霞浦县| 石林| 重庆市| 兰西县|