1

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

有什么方法可以收集所有错误并将它们全部显示在页面底部?

多谢!

4

2 回答 2

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 />";
        }
    }
?>
于 2012-10-21T07:30:29.380 回答
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 中保持文件打开,并在每次测试后检查它以查看是否发生了任何新错误。

于 2012-10-21T07:26:20.240 回答