首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP trigger_error() 主動觸發錯誤輔助除錯:自訂通知、警告與致命錯誤等級

     編輯:PHP 綜合知識

錯誤抑制符 @

在可能產生錯誤的運算式前加 @ 可抑制錯誤輸出(不影響錯誤記錄)。

$content = @file_get_contents('not_exist.txt'); // 不會輸出 Warning

trigger_error() 手動拋出錯誤

語法:trigger_error(string $message, int $type = E_USER_NOTICE)

類型常數等級行為
E_USER_NOTICE通知腳本繼續執行
E_USER_WARNING警告腳本繼續執行
E_USER_ERROR致命錯誤腳本終止
E_USER_DEPRECATED棄用警告腳本繼續執行

實戰範例:參數驗證

$num1 = 1;
$num2 = '2a'; // 非純數字

if (!(is_numeric($num1) && is_numeric($num2))) {
    trigger_error('num1 和 num2 必須為合法數值', E_USER_NOTICE);
} else {
    echo $num1 + $num2;
}
echo '<br>程式繼續執行';

輸出:

Notice: num1 和 num2 必須為合法數值 in test.php on line 6
程式繼續執行

進階:資料庫連線失敗拋出致命錯誤

$link = @mysql_connect('localhost', 'user', 'wrong_pass');
if (!$link) {
    // 取代預設 E_WARNING,直接終止腳本
    trigger_error('資料庫連線失敗: ' . mysql_error(), E_USER_ERROR);
}

配合錯誤處理器

set_error_handler(function($errno, $errstr, $errfile, $errline) {
    if ($errno === E_USER_ERROR) {
        // 記錄至資料庫、發送郵件、顯示友善錯誤頁
        logToDB($errstr);
        die('系統維護中,請稍後再試');
    }
    return false; // 讓 PHP 繼續預設處理
});

最佳實踐

  • 驗證失敗用 E_USER_NOTICE 或 E_USER_WARNING
  • 不可恢復的關鍵錯誤(DB 連線、配置遺失)用 E_USER_ERROR
  • 棄用函數用 E_USER_DEPRECATED
  • 生產環境關閉 display_errors,配合 set_error_handler 統一處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved