【问题标题】:Laravel breaks entire app on PHP noticesLaravel 在 PHP 通知上破坏了整个应用程序
【发布时间】:2013-08-28 20:40:47
【问题描述】:

我怎样才能让 Laravel 4 或 5 忽略 PHP 通知(如未定义变量通知),而不是仅仅因为一个简单的“未定义索引或变量”PHP 通知而破坏整个应用程序?

我可以在 Laravel 3 上设置 config/error.php 中的“忽略”数组。但我在 Laravel 4 或 5 中找不到如何做到这一点。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    在 Laravel 5.1 中,您可以将 error_reporting(0) 或任何您想要的内容添加到 \app\Providers\AppServiceProvider.php boot() 方法中

    【讨论】:

    • 天哪,升级旧的 laravel 4.2 应用程序为我节省了这么多时间
    • @IvankaTodorova 有时必须务实。当一个在 php 5.4 上开发的旧 4.2 laravel 应用程序的端口必须升级以在 php 7 和 laravel 5.2 上运行,并且只有 1 天的时间来完成它,那么是的,你做你该做的。
    • @bhuBouevidya 但它不再是同一个应用程序。隐藏错误意味着应用程序以某种方式行为不端,结果将出乎意料并且可能很糟糕。我不会称之为务实的
    • @IvankaTodorova 我没有使用error_reporting(0) 关闭所有错误 - 我只是关闭了E_NOTICE,因为旧代码假设它可以访问变量或数组偏移量,如果它们不存在它只会返回一些虚假的东西。像魅力一样工作。应用程序运行良好。所以解决方案非常务实。客户不愿意付钱让我在接下来的 2-4 周内挖掘出做出这种假设的每一行代码,并希望我能找到每一行(我们说的是超过 100,000 行)。但无论如何,感谢您的评判。
    • 这确实是唯一对我有用的东西。
    【解决方案2】:

    此行为是由于将错误报告设置为 -1。这是 Laravel 的默认行为 - 如果您使用 Laravel 4,请参阅 vendor/laravel/framework/src/illuminate/Foundation/start.php 中的第 14 行,如果您使用 Laravel 5,请参阅 vendor/laravel/framework/src/illuminate/Foundation/Bootstrap/HandleExceptions.php 中的第 29 行:

    error_reporting(-1); // Reports everything
    

    Laravel 的错误处理程序尊重您的 error_reporting 级别,并且会忽略您告诉 PHP 不要报告的任何错误。值得一提的是,更改错误报告级别并不是一个好主意。但是要覆盖前面的指令,您可以在 app/start/global.php(在 Laravel 4 中)或 app/bootstrap/app.php(在 Laravel 5 中)中添加错误报告首选项

    error_reporting(E_ALL ^ E_NOTICE); // Ignores notices and reports all other kinds
    

    同样,这不是解决方案。这只是你所要求的。所有和任何错误、警告、通知等都可以而且应该得到修复。

    您可以在此处查看所有用于错误报告的常量:http://www.php.net/manual/en/errorfunc.constants.php

    您可以在此处获取有关如何使用 error_reporting 的更多信息:http://php.net/manual/en/function.error-reporting.php

    【讨论】:

    • 我用它来关闭严格模式,我认为这是一个非邪恶的用法。首先是严格模式 does very little for you 和 PHP 7 中的 removed from the language,同时完全删除了两个低于该级别的警告 - 重要的是包括在严格模式下完全不合理地禁止抽象静态方法。在我看来,默认启用 E_STRICT 是 Laravel 的一个值得商榷的决定。
    • app/bootstrap/app.php 中添加 error_reporting(E_ALL ^ E_NOTICE); 似乎不适用于 laravel 5.1
    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 2016-10-03
    • 2016-05-16
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2013-08-04
    相关资源
    最近更新 更多