在页面底部而不是顶部打印错误?

时间:2012-10-21 07:17:55

标签: php error-reporting

在开发我的网站时,我启用了错误报告。但每次生成错误时,都会在开始标记之前在页面顶部生成错误。这有时会破坏文档并改变网站的许多方面,例如性能和元素的显示方式。

有没有办法收集所有错误并在页面底部全部显示?

谢谢堆!

2 个答案:

答案 0 :(得分:2)

例如,您可以创建自己的错误处理程序并将所有错误收集到文件中。或者进入数组,然后按照您的要求显示页面底部的所有错误。

以下是它应该如何:

<?php
// At the top of your PHP code

class MyError
{
    protected static $collected = array();

    public static function getCollectedErrors()
    {
      return self::$collected;
    }

    protected static function addError($key, $error)
    {
      if (!isset(self::$collected[$key]))
        self::$collected[$key] = array();

      self::$collected[$key][] = $error;
    }

    // CATCHABLE ERRORS
    public static function captureNormal( $number, $message, $file, $line )
    {
        // Insert all in one table
        $error = array( 'type' => $number, 'message' => $message, 'file' => $file, 'line' => $line );
        // Display content $error variable
        self::addError('error', $message . " at " . $file . ':' . $line);
    }

    public static function captureException( $exception )
    {
        // Display content $exception variable
        self::addError('exception', $exception);
    }

    // UNCATCHABLE ERRORS
    public static function captureShutdown( )
    {
        $error = error_get_last( );
        if( $error ) {
            ## IF YOU WANT TO CLEAR ALL BUFFER, UNCOMMENT NEXT LINE:
            # ob_end_clean( );

            // Display content $error variable
            self::addError('shutdown', $error);
        } else { self::addError('shutdown', '<none>'); return true; }
    }
}

set_error_handler( array( 'MyError', 'captureNormal' ) );
set_exception_handler( array( 'MyError', 'captureException' ) );
register_shutdown_function( array( 'MyError', 'captureShutdown' ) );
?>

然后,您可以使用以下类别按类别访问所有错误:

Error::getCollectedErrors();

UPD:要显示页面底部的错误,请将此代码添加到要输出错误的位置:

<?php
    $errors = MyError::getCollectedErrors();

    foreach ($errors as $category => $items) {
        echo "<strong>" . $category . ":</strong><br />";

        foreach ($items as $error) {
            echo $error . "<br />";
        }
    }
?>

答案 1 :(得分:0)

我不知道将它们全部放在页面底部,但您可以做的是将所有错误消息发送到这样的错误文件:

error_reporting(E_ALL);
ini_set('display_errors', 'off');
ini_set('log_errors', 'on');
ini_set('error_log', 'path/to/error/file.log');

此外,在进行编码和测试时,您可以在IDE中保持文件打开状态,并在每次测试后检查它是否有任何新错误。