MySQL的PHP​​ error_log错误

时间:2010-08-19 19:24:27

标签: error-handling php

在之前的一张票{i asked about logging PHP errors in MySQL中,它给了我:

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;

但这些错误只是输出到屏幕上,我做错了什么?

3 个答案:

答案 0 :(得分:2)

您只能使用自定义错误处理程序处理运行时错误。您的示例中的echo "foo错误发生在解析(即读入)源时。由于PHP无法完全解析代码,因此它也无法在此错误上运行错误处理程序。

答案 1 :(得分:1)

如果你被迫测试语法是否正确,你可以使用php_check_syntax函数,文件名参数PHP Manual php_check_syntax

php_check_syntax还提供了第二个参数,当使用时将使用错误字符串填充,据我记得

答案 2 :(得分:0)

这确实是错误记录的可怕方式

  1. 您不需要数据库的单一优势。你会为某个行号进行数据库查找吗?或者按文件名订购结果?
  2. 数据库本身就是许多错误的主题。
  3. 您已经被告知在程序逻辑级别上捕获解析错误是不可能的,因为语法错误的程序永远不会运行。
  4. 我们以您的代码为例。它会引发MySQL错误(因为查询格式不正确),您将永远看不到它。以及发生的任何其他错误。这就是我所说的。