[英]PHP/MySQL: What should I use to manage errors?
我有一個使用PHP和Mysqli構建的網站,我正處於我應該考慮我的錯誤處理的部分。
即使我認為我的代碼是完美的錯誤,當我向公眾發布網站時也會出現錯誤。 我發現這個答案顯示了我如何為用戶隱藏錯誤,但開發人員仍然可以看到它們。 雖然我不知道這是否真的是我網站的最佳方法。 我不希望用戶看到我的PHP本身產生的丑陋的錯誤消息,但我可以根據錯誤設計我自己的錯誤消息。
PHP具有內置函數來捕獲各種類型的錯誤:
set_error_handler
您應該使用此函數捕獲所有頁面中的錯誤,您可以編寫自定義代碼,無論是向數據庫插入錯誤,還是寫入單獨的錯誤日志文件,或者通過電子郵件立即通知開發人員,您可以自行決定。
我會從使用開始
try
{
//your code here
}
catch(Exception $ex)
{
echo $ex->getMessage();
}
在進行數據庫查詢時。 錯誤處理可以將其登錄到文件或類似的東西。 這樣你就能發現正在發生的事情並為自己設定需要做的事情......
error_reporting(E_ALL);
ini_set('display_errors','On');
ini_set('error_log', 'error.log');
ini_set('log_errors', 'On');
這些函數將顯示錯誤,如果有的話,它將列出error.log中的錯誤。 如果要隱藏錯誤,不要在網站上顯示,那么您可以將值從“開”設置為“關”。 如果您只想從用戶而不是開發人員隱藏它,那么您可以設置“ini_set('display_errors','off');” 所以用戶看不到這些,但開發人員可以從error.log中解析它
我該如何處理這些錯誤?
您應該記錄它們並分析日志以解決它們(或者至少確保您的站點是安全的)。
我應該將它們全部保存在數據庫中嗎?
不 - 您將失去對數據庫連接問題的可見性。 正確的方法是通過本地計算機上的syslog功能。
我如何知道可能發生的錯誤?
? 他們全部。
處理錯誤是應用程序最重要的方面之一。 用戶希望它能夠正常工作,但是當發生錯誤時,無論用戶有多好,他們都可能對您的應用程序失去信心。 我很難學到它。
我們使用類似於以下的類:
class ErrorHandler
{
public static function registerHandlers()
{
$inst = new ErrorHandler;
set_error_handler(array(&$inst, 'errorHandler'), E_ALL);
set_exception_handler(array(&$inst, 'exceptionHandler'));
register_shutdown_function(array(&$inst, 'shutdownHandler'));
}
public function shutdownHandler()
{
if (($error = error_get_last()))
{
$this->_clearOutputBuffers();
// Handle error
}
}
public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
{
$this->_clearOutputBuffers();
// Handle error
}
public function exceptionHandler(Exception $exception)
{
$this->_clearOutputBuffers();
// Handle error
}
private function _getErrorCode($sMessage, $sFile, $nLine, $nCode)
{
$errorCode = sprintf("%u", crc32($sMessage.$sFile.$nLine.$nCode));
}
private function _clearOutputBuffers()
{
if (count(ob_list_handlers()) > 0)
{
ob_clean();
}
}
}
這個類能夠捕獲大多數錯誤,並且在調試時也能很好地工作。 當捕獲到錯誤時,我們將所有信息寫入我們稍后可以引用的文件中。 此外,我們將開發和生產之間的環境分開,並為其分別設置錯誤屏幕。
對於開發環境,我們使用錯誤屏幕顯示文件的提取,堆棧跟蹤和變量。
對於生產環境,我們顯示一個錯誤屏幕,其中包含從_getErrorCode返回的錯誤編號。 如果客戶想要就錯誤與我們聯系,他所要做的就是告訴我們這個號碼,我們可以立即查找並將所有數據放在我們面前。
我附上了開發錯誤屏幕的截圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.