PHP捕获行号?

时间:2010-02-27 10:30:20

标签: php error-handling

我正在我的应用程序中构建一个基本的错误记录功能,我只记录一个自定义消息,例如“缺少产品ID”并将其记录在数据库中。有没有什么方法可以动态捕获错误被触发的类或函数(即调用log_error()的函数)或行号?

4 个答案:

答案 0 :(得分:3)

从PHP 5.2.0开始,有error_get_last()。 (干杯@Gordon)它将为您提供一个数组,其中包含有关上一个错误的所有信息:

Array
(
    [type] => 8
    [message] => Undefined variable: a
    [file] => C:\WWW\index.php
    [line] => 2
)

一般来说,处理错误的更灵活的方法是定义custom error handler

自定义错误处理程序接受以下参数:

handler  ( int $errno, string $errstr  [, string $errfile
           [, int $errline  [, array $errcontext  ]]] )

<强>回溯 使用回溯获得的最多信息 - 在许多情况下很有用。为此,请将错误处理程序与debug_backtrace()结合使用。它将为您提供一个包含调用堆栈中每个点的数组(即调用哪个函数调用哪个函数,直到错误。)

堆栈跟踪需要花费大量的计算时间,所以你不应该在生产中使用它们并且有一个开关来打开和关闭它们。

答案 1 :(得分:1)

不要忘记magic constants

_________ LINE_______行号。

答案 2 :(得分:0)

如果您使用的是Exceptions,则可能有办法:Exception class中有一个getLine()方法,可以让您知道抛出异常的位置。

如果您正在使用功能,则没有“真实”的方式;一个解决方案可能是使用debug_backtrace函数 - 请参阅手册页,了解它可以为您提供的信息示例......

答案 3 :(得分:0)

您可以轻松地使代码出现错误,如

    $get = mysql_query("SELECT * FROM 'table' where id='.....'");           
    $row = mysql_fetch_array($get);
    if (!$row)
    {
    //record the data now
    }