代码之家  ›  专栏  ›  技术社区  ›  robjmills

php错误\将错误记录到mysql

  •  1
  • robjmills  · 技术社区  · 14 年前

    在以前的一张票上我 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 回复  |  直到 14 年前
        1
  •  2
  •   Sjoerd    14 年前

    只能使用自定义错误处理程序处理运行时错误。这个 echo "foo 示例中的错误发生在 句法分析 (即读)源。因为PHP不能完全解析代码,所以它也不能在这个错误上运行错误处理程序。

        2
  •  1
  •   canni    14 年前

    如果强制测试语法是否正确,可以使用php_check_语法函数和文件名参数 PHP Manual php_check_syntax

    php_check_语法还提供了第二个参数,据我记忆,witch在使用时将由错误字符串填充。

        3
  •  0
  •   Your Common Sense    14 年前

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

    1. 您不需要数据库的单一优势。您可以为特定的行号进行数据库查找吗?还是按文件名排序?
    2. 数据库本身就是许多错误的主题。
    3. 已经有人告诉您,不可能在程序逻辑级别捕获解析错误,因为语法错误的程序永远不会运行。

    让我们以您的代码为例。它将引发一个MySQL错误(因为查询格式不正确),您将永远看不到。以及发生的任何其他错误。我就是这么说的。