PHP脚本加载完成后如何显示错误?

PHP how to display errors after script finished loading?

提问人:Tubica 提问时间:9/1/2023 最后编辑:user2342558Tubica 更新时间:9/1/2023 访问量:39

问:

我已经使用:

ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

在我的代码开头。但是,错误消息直接显示在输出中(很多,因此您无法很好地找到错误)。

脚本加载完成后,如何显示发生的所有错误?

PHP 错误处理

评论

1赞 ADyson 9/1/2023
将它们记录到一个文件中,然后只向用户显示一个通用错误页面。phpdelusions.net/articles/error_reporting 有一个合理的指南来设置您的错误报告。
1赞 CBroe 9/1/2023
PHP没有直接的机制。您可以禁止显示输出中的显示,而是检查错误日志。或者,您可以实现自己的自定义错误处理程序,然后您可以完全控制何时何地输出的内容。还有一些外部解决方案,它们以浏览器扩展的形式出现(但仍然需要安装一些服务器端组件),stackoverflow.com/a/39210214/1427878
0赞 user2342558 9/1/2023
您的代码应该没有任何错误。唯一最好的方法是在每次发生时解决所有这些问题。
0赞 Tubica 9/1/2023
@user2342558这就是为什么我试图得到所有错误。修复它们!但是很难修复错误,您甚至看不到;)
0赞 Your Common Sense 9/1/2023
我不明白你在“发现”错误方面有什么问题。只需打开页面源代码,获取第一个错误消息,获取代码,修复错误,重新加载页面,获取下一个错误等等

答:

0赞 shingo 9/1/2023 #1

您可以将错误/异常处理程序与析构函数一起使用。处理程序捕获错误,析构函数将在页面的最底部显示捕获的错误。

class ErrorHandler {
    private static $instance = null;
    private static $errors = [];
    
    public static function Init() {
        if(!self::$instance) {
            self::$instance = new self;
            
            set_error_handler(function($errno, $errstr, $errfile, $errline){
                self::$errors[] = new ErrorException($errstr, 0, $errno, $errfile, $errline);
            });
            
            set_exception_handler(function($ex){
                self::$errors[] = $ex;
            });
        }
    }
    
    function __destruct(){
        foreach(self::$errors as $errstr)
            echo $errstr, '<br />';
    }
}

ErrorHandler::Init();

评论

0赞 Your Common Sense 9/1/2023
这是一个有趣的解决方案,但对这个特定问题的错误答案。这本质上是一种暂时的情况,必须由基础设施而不是代码来修复。
0赞 shingo 9/1/2023
这是我在开发中常用的方法,有时错误会显示在不显眼的地方。我认为这个要求本身是暂时的,因为你应该期望在上线之前修复所有错误。
0赞 Tubica 9/1/2023
@shingo谢谢你认真对待我!这家伙太无知了..当然,我只需要错误来修复它们,但是我什至无法在不找到它们的情况下修复它们xD
0赞 shingo 9/1/2023
@Tubica不,如果你真的有大量的错误,你最好使用错误日志,因为输出它们仍然需要时间。