Laravel / Artisan CLI重设error_reporting级别?

时间:2019-01-10 19:15:27

标签: php laravel artisan

我们正在使用Laravel作业队列在Schedule中运行多个作业:run cron。我们在php.ini(针对Apache和命令行)中设置了错误报告,以禁止PHP弃用的错误,但看来作业未成功完成。

当我尝试通过工匠在命令行中手动运行作业时,会出现过时错误,因此我怀疑这是导致它们失败的原因。

如果我添加:

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

在作业的php文件顶部,当手动调用并按作业时间表运行时,它可以成功工作。

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

我跑了

php -r "echo error_reporting();"

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

1 个答案:

答案 0 :(得分:0)

我们发现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捕获和报告通过系统配置抑制的错误-可能不是您想要的。