<span><span><?php </span></span><span><span>$test = 5; </span></span><span><span>if ($test > 1) { </span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE); </span></span><span><span>}</span></span>當您設有錯誤處理基礎架構時,使用TRIGGE_ERROR()觸發錯誤非常有用,從而使您可以統一處理自定義錯誤以及PHP提出的錯誤和警告。 如果要實現自定義錯誤處理策略,例如根據其嚴重性向數據庫發送電子郵件或記錄錯誤,則需要使用SET_ERROR_HANDLER()來定義自定義錯誤處理程序。該函數接受兩個參數:回調函數或靜態方法,該方法將在增加錯誤時被調用,並且(可選)錯誤級別函數/方法處理。回調的簽名是:
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
<span><span><?php </span></span><span><span>$test = 5; </span></span><span><span>if ($test > 1) { </span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE); </span></span><span><span>}</span></span>上面的摘要註冊了一個錯誤處理程序,該處理程序執行以下操作:當出現非致命錯誤時,記錄將插入數據庫中,而不是顯示錯誤並將其記錄到文件中;當發生致命錯誤時,它將在數據庫中記錄並終止您的腳本。 但是,您應該注意的自定義錯誤處理程序有一些局限性。錯誤處理程序繞過PHP的標準錯誤處理行為,因此無法處理處理程序本身可能出現的錯誤。例如,如果數據庫服務器關閉,則上述功能將無法記錄日誌。此外,錯誤處理程序無法捕獲某些內部錯誤,例如e_core_error和e_compile_error,或同一文件中的e_strict錯誤,因為這些錯誤在處理程序有機會註冊之前發生。 使用異常來處理錯誤
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
<span><span><?php </span></span><span><span>$test = 5; </span></span><span><span>if ($test > 1) { </span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE); </span></span><span><span>}</span></span>上面的代碼定義了兩種新的自定義類型,nameException 和EmailException,可用於指示不同的錯誤。然後在Try塊中,代碼檢查是否已為變量$ name和$ email提供了值。如果兩個是空的,則使用擲拋出適當的例外。執行相應的捕獲塊,以處理錯誤。
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
<span><span><?php </span></span><span><span>function errorHandler($errno, $errstr, $errfile, $errline) { </span></span><span> <span>static $db; </span></span><span> <span>if (empty($db)) { </span></span><span> <span>$db = new PDO(DSN, DBUSER, DBPASS); </span></span><span> <span>} </span></span><span> </span><span> <span>$query = "INSERT INTO errorlog (severity, message, filename, lineno, time) VALUES (?, ?, ?, ?, NOW())"; </span></span><span> <span>$stmt = $db->prepare($query); </span></span><span> </span><span> <span>switch ($errno) { </span></span><span> <span>case E_NOTICE: </span></span><span> <span>case E_USER_NOTICE: </span></span><span> <span>case E_DEPRECATED: </span></span><span> <span>case E_USER_DEPRECATED: </span></span><span> <span>case E_STRICT: </span></span><span> <span>$stmt->execute(array("NOTICE", $errstr, $errfile, $errline)); </span></span><span> <span>break; </span></span><span> </span><span> <span>case E_WARNING: </span></span><span> <span>case E_USER_WARNING: </span></span><span> <span>$stmt->execute(array("WARNING", $errstr, $errfile, $errline)); </span></span><span> <span>break; </span></span><span> </span><span> <span>case E_ERROR: </span></span><span> <span>case E_USER_ERROR: </span></span><span> <span>$stmt->execute(array("FATAL", $errstr, $errfile, $errline)); </span></span><span> <span>exit("FATAL error <span><span>$errstr</span> at <span>$errfile</span>:<span>$errline</span>"</span>); </span></span><span> </span><span> <span>default: </span></span><span> <span>exit("Unknown error at <span><span>$errfile</span>:<span>$errline</span>"</span>); </span></span><span> <span>} </span></span><span><span>} </span></span><span> </span><span><span>set_error_handler("errorHandler"); </span></span><span> </span><span><span>$test = 5; </span></span><span><span>if ($test > 1) { </span></span><span> <span>trigger_error("Value of <span><span>$test</span> must be 1 or less"</span>, E_USER_NOTICE); </span></span><span><span>}</span></span>
> php?
如何處理PHP?
>
>如何關閉PHP中的錯誤報告?但是,關閉錯誤報告不建議用於實時網站,因為它可能會使很難識別和修復問題。>
@ operator in php中的 @ operator用於抑制錯誤消息。當將PHP中的表達式添加到一個表達式中時,該表達式可能生成的任何錯誤消息都將被忽略。>
php提供error_log()函數以將錯誤消息發送到服務器的錯誤日誌或指定文件。此功能可用於跟踪錯誤和調試。您還可以通過更改php.ini文件中的log_errors指令來配置php以記錄所有錯誤。
以上是phpmaster | PHP中的錯誤處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!