1 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
首先,我必須警告您,在一個(gè)向公眾開(kāi)放的實(shí)時(shí)站點(diǎn)上,電子郵件錯(cuò)誤可能會(huì)淹沒(méi)您的郵箱,以防萬(wàn)一出現(xiàn)嚴(yán)重故障,因?yàn)閷?duì)站點(diǎn)的每個(gè)請(qǐng)求都會(huì)導(dǎo)致發(fā)送一封不同的電子郵件。在我工作的公司中,這種情況不止一次發(fā)生過(guò)。有時(shí)很難在錯(cuò)誤的瀑布中找到真正的原因。
監(jiān)控服務(wù)器日志被認(rèn)為是更安全和準(zhǔn)確的解決方案。事實(shí)證明,在錯(cuò)誤日志上使用 Grep 比瀏覽電子郵件更有效。但無(wú)論哪種方式,這里的問(wèn)題是如何統(tǒng)一處理所有錯(cuò)誤,而處理程序中采取的操作可以是任何操作。
錯(cuò)誤和異常是不同的野獸,每個(gè)都有自己的處理程序。因此,要使錯(cuò)誤處理統(tǒng)一,您必須首先將錯(cuò)誤轉(zhuǎn)換為異常,然后在異常處理程序中執(zhí)行所需的處理,無(wú)論它是什么——日志記錄、電子郵件或任何東西。
因此,您將需要本文中介紹的兩個(gè)功能,即簡(jiǎn)單地將錯(cuò)誤轉(zhuǎn)換為異常的錯(cuò)誤處理程序,
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, "myemailaddress@myserver.com", "From: defaultemail@hostingserver.com");
? ? ? ? echo "<h1>500 Internal Server Error</h1>
? ? ? ? ? ? ? An internal server error has been occurred.<br>
? ? ? ? ? ? ? Please try again later.";
? ? }
});
每次發(fā)生錯(cuò)誤并且代碼在實(shí)時(shí)站點(diǎn)上運(yùn)行時(shí),它都會(huì)向您發(fā)送一封電子郵件。
此外,您可能希望添加一個(gè)致命錯(cuò)誤處理程序,它可能有助于處理同名錯(cuò)誤??梢栽谖恼轮锌吹剿腥齻€(gè)處理程序組合在一起的完整示例。
關(guān)于mysqli,你是絕對(duì)正確的,下面一行
?mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
將告訴 mysqli 拋出異常,這些異常將由上面定義的處理程序處理。
- 1 回答
- 0 關(guān)注
- 179 瀏覽
添加回答
舉報(bào)