1 回答

TA貢獻1780條經驗 獲得超5個贊
首先,我必須警告您,在一個向公眾開放的實時站點上,電子郵件錯誤可能會淹沒您的郵箱,以防萬一出現嚴重故障,因為對站點的每個請求都會導致發送一封不同的電子郵件。在我工作的公司中,這種情況不止一次發生過。有時很難在錯誤的瀑布中找到真正的原因。
監控服務器日志被認為是更安全和準確的解決方案。事實證明,在錯誤日志上使用 Grep 比瀏覽電子郵件更有效。但無論哪種方式,這里的問題是如何統一處理所有錯誤,而處理程序中采取的操作可以是任何操作。
錯誤和異常是不同的野獸,每個都有自己的處理程序。因此,要使錯誤處理統一,您必須首先將錯誤轉換為異常,然后在異常處理程序中執行所需的處理,無論它是什么——日志記錄、電子郵件或任何東西。
因此,您將需要本文中介紹的兩個功能,即簡單地將錯誤轉換為異常的錯誤處理程序,
set_error_handler(function ($level, $message, $file = '', $line = 0)
{
? ? throw new ErrorException($message, 0, $level, $file, $line);
});
和這樣的異常處理程序
set_exception_handler(function ($e)
{
? ? error_log($e);
? ? http_response_code(500);
? ? if (ini_get('display_errors')) {
? ? ? ? echo $e;
? ? } else {
? ? ? ? error_log($e, 1, "[email protected]", "From: [email protected]");
? ? ? ? echo "<h1>500 Internal Server Error</h1>
? ? ? ? ? ? ? An internal server error has been occurred.<br>
? ? ? ? ? ? ? Please try again later.";
? ? }
});
每次發生錯誤并且代碼在實時站點上運行時,它都會向您發送一封電子郵件。
此外,您可能希望添加一個致命錯誤處理程序,它可能有助于處理同名錯誤??梢栽谖恼轮锌吹剿腥齻€處理程序組合在一起的完整示例。
關于mysqli,你是絕對正確的,下面一行
?mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
將告訴 mysqli 拋出異常,這些異常將由上面定義的處理程序處理。
- 1 回答
- 0 關注
- 171 瀏覽
添加回答
舉報