繁体   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