在可能產生錯誤的運算式前加 @ 可抑制錯誤輸出(不影響錯誤記錄)。
$content = @file_get_contents('not_exist.txt'); // 不會輸出 Warning
語法: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_WARNINGE_USER_ERRORE_USER_DEPRECATEDdisplay_errors,配合 set_error_handler 統一處理