PHP注意页面URL

时间:2012-11-29 13:15:34

标签: php error-handling

我在日志中收到了很多PHP通知,但我想知道发生了什么页面的URL注意,我该如何记录这些信息?

[29-Nov-2012 13:58:29] PHP Notice:  Array to string conversion in /usr/home/sdf/data/www/sdfsdf.com/core/test.php on line 156

我想记录任何信息,在获得通知时,如何记录它?

4 个答案:

答案 0 :(得分:0)

您需要设置一些内容来捕获错误/调试信息,但不会向全世界显示。不确定您是否在此应用程序中内置了会话管理,但您可能希望为此练习添加一些基本控件。

如果您使用多个页面中包含的功能,有时很难跟踪错误。该错误可能似乎发生在父页面上,但实际上是在该函数中触发,该函数包含在另一页面上。在这种情况下,错误行号可能会产生误导。

如果您有间歇性错误而无法立即隔离,则可能有助于获得有关脚本中发生的事情的一些反馈。这是一个如何在函数中进行基本调试的粗略示例:

function get_func_argNames($funcName) 
{
    $f = new ReflectionFunction($funcName);
    $result = array();
    foreach ($f->getParameters() as $param) 
    {
        $result[] = $param->name;
    }
    return $result;
}


function myCoolFunction($arg1, $arg2, $arg3)
{

    $debug = false;

    $php_function_args  = implode(', ',get_func_argNames(__FUNCTION__));

    $_debug_txt = "<b><span style='color:blue;'>function</span> <span style='color:darkblue;'>" .__FUNCTION__. "</span></b>($php_function_args)";

    if ($debug)
    {
        EmailAppDev($_debug_txt);
    }

        // myCoolFunction
        $x = $arg1 + $arg2 + $arg3;
        return $x

 }

理想情况下,您将拥有一个会话帐户,可以控制启用了哪些$ debug。

如果您没有使用功能,则需要在脚本的战略区域设置类似的内容,以了解事情的发生时间和地点。

如果没有让整个应用程序看到它,那么很难给出细节。

答案 1 :(得分:0)

尝试将php错误日志中的时间戳与您的Web服务器访问日志相关联。

或者,你可以尾随日志并触发随机页面。

或者,设置自定义错误处理程序以记录所有类型的数据。

http://php.net/manual/en/function.set-error-handler.php

function myErrorHandler( $errno, $errstr, $errfile, $errline ){

    if (!(error_reporting() & $errno)) {
        // This error code is not included in error_reporting
        return;
    }

    switch ($errno) {
    case E_USER_ERROR:
        echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
        echo "  Fatal error on line $errline in file $errfile";
        echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
        echo "Aborting...<br />\n";
        exit(1);
        break;

    case E_USER_WARNING:
        echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
        break;

    case E_USER_NOTICE:
        echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
        break;

    default:
        echo "Unknown error type: [$errno] $errstr<br />\n";
        break;
    }

    /* Don't execute PHP internal error handler */
    return true;

}

set_error_handler( "myErrorHandler" );

答案 2 :(得分:0)

您可以做的是将您的php通知时间与您的网络服务器访问日志进行比较,以找出导致该通知的网址。

该通知实际上看起来不像URL依赖。 它表明,您正在尝试将“类型”数组转换为字符串,当您执行以下操作时会发生这种情况:

$array = array( 'foo', 'bar' );

echo $array;
$string = 'test' . $array;
printf ( 'foo %s', $array );

答案 3 :(得分:0)

要查找此错误特别是,您可以执行此操作以找出错误(包括使用debug_backtrace打印回溯):

if (is_string($var)) {
    //Then it's OK - do whatever you were doing on line 156
} else {
    //Something's wrong! Let's log it to some file!
    ob_start();
    var_dump($var);
    print_r(debug_backtrace());
    echo "\n----------------------------------------------\n";
    $debugContent = ob_get_clean();

    $logHandle = fopen("wrong_var_type.log", "a");
    if ($logHandle !== false) {
        fwrite($logHandle, $debugContent . "\n");
    }
    @fclose($logHandle);
}

或者,使用记录器:

https://stackoverflow.com/a/10800296/247893