簡體   English   中英

PHP error_log 錯誤到 MySQL

[英]PHP error_log errors to MySQL

在之前的一張票中,我詢問了在 MySQL 中記錄 PHP 錯誤的問題,這給了我:

function myErrorHandler($errno, $errstr, $errfile, $errline)
{
         // mysql connect etc here...
    $sql = "INSERT INTO `error_log` SET
            `number` = ".mysql_real_escape_string($errno).",
            `string` = ".mysql_real_escape_string($errstr).",
            `file` = ".mysql_real_escape_string($errfile).",
            `line` = ".mysql_real_escape_string($errline);
    mysql_query($sql);
    // Don't execute PHP internal error handler
    return true;
}

// set to the user defined error handler 
$new_error_handler = set_error_handler("myErrorHandler");

我可以完成這項工作,但前提是它是這樣觸發的:

trigger_error("message here");

但是,我還希望為所有錯誤調用錯誤處理程序,例如語法錯誤,例如:

echo "foo;

但是這些錯誤只是輸出到屏幕上,我做錯了什么?

您只能使用自定義錯誤處理程序處理運行時錯誤。 您的示例中的echo "foo錯誤在解析(即讀入)源代碼時發生。由於 PHP 無法完全解析代碼,因此它也無法在此錯誤上運行您的錯誤處理程序。

如果你被迫測試語法是否正確,你可以使用 php_check_syntax 函數,帶有文件名參數PHP 手冊 php_check_syntax

php_check_syntax 還提供了第二個參數,在使用時會被錯誤字符串填充,據我所知

這確實是一種糟糕的錯誤記錄方式

  1. 您不需要數據庫的單一優勢。 您會為特定行號進行數據庫查找嗎? 或者按文件名排序結果?
  2. 數據庫本身就是許多錯誤的主題。
  3. 您已經被告知在程序邏輯級別捕獲解析錯誤是不可能的,因為語法錯誤的程序永遠不會運行。

讓我們以您的代碼為例。 它會引發一個你永遠不會看到的 MySQL 錯誤(因為查詢的格式不正確)。 以及發生任何其他錯誤。 這就是我要說的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM