Laravel / Artisan CLI 重置 error_reporting 级别?

Laravel / Artisan CLI resets error_reporting level?

我们正在使用 Laravel 作业队列通过 schedule:run cron 来 运行 多个作业。我们在 php.ini(对于 apache 和命令行)设置了错误报告以抑制 PHP 的弃用错误,但似乎作业没有成功完成。

当我尝试通过 artisan 在命令行手动 运行 作业时,我遇到了弃用错误,所以我怀疑这是导致它们失败的原因。

如果我添加:

ini_set('error_reporting', 'E_ALL & ~E_DEPRECATED');

在作业的 php 文件顶部,它在手动调用时以及在作业计划中 运行 时成功运行。

Artisan 是否以某种方式重置错误报告级别或丢弃 php.ini 文件设置的错误级别?

我运行

php -r "echo error_reporting();"

在命令行中,它向我显示了正确的错误报告整数,表明应抑制已弃用的错误。

我们发现 Laravel 覆盖了 error_reporting 中的设置:vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php

public function bootstrap(Application $app)
{
    $this->app = $app;

    error_reporting(-1);

    set_error_handler([$this, 'handleError']);

    set_exception_handler([$this, 'handleException']);

    register_shutdown_function([$this, 'handleShutdown']);

    if (! $app->environment('testing')) {
        ini_set('display_errors', 'Off');
    }
}

删除 error_reporting(-1);此处的行 Laravel 尊重系统在 php.ini 中的 error_reporting 设置。显然,这会阻止 Laravel 捕获和报告通过系统配置抑制的错误 - 这可能是也可能不是您想要的。