【问题标题】:Laravel / Artisan CLI resets error_reporting level?Laravel / Artisan CLI 重置 error_reporting 级别?
【发布时间】:2019-06-05 17:24:54
【问题描述】:

我们正在使用 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();"

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

【问题讨论】:

  • 不要引用'E_ALL & ~E_DEPRECATED',它们都是独立的常量。您现在基本上关闭了所有错误。
  • ini_set 方法需要两个字符串,我认为您应该这样做。 error_reporting 值未在 ini 文件中引用。
  • ini_set() 似乎不能真正以这种方式使用 - 至少不能使用复杂的 error_reporting 设置。我相信你可以做 ini_set('error_reporting', E_ALL)。无论哪种方式,我都不想做这个 ini 设置。我不关心我是仅抑制已弃用的错误还是所有错误。
  • ini_set('error_reporting', E_ALL & ~E_DEPRECATED); works just fine.

标签: php laravel laravel-artisan


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-02
    • 2015-08-29
    • 2013-08-27
    • 2010-12-29
    • 1970-01-01
    • 2018-12-09
    • 2017-06-13
    相关资源
    最近更新 更多