• PHP 开启错误显示并设置错误报告级别


    警告:生产环境永远都不要显示任何错误信息!

    显示错误(display_errors)和错误报告(error_reporting)是两回事。PHP 脚本发生错误时,可以根据设置选择是否报告这个错误(记录到错误日志中),如果设置中开启了 display_errors,则同时把错误信息打印到屏幕上。

    项目中常用的设置

    switch (ENVIRONMENT)
    {
        // 对于开发环境,报告所有错误,同时显示到屏幕上
        case 'development':
            error_reporting(-1);
            ini_set('display_errors', 1);
        break;
    
        // 对于测试和生产环境,不显示错误,5.3 以上的版本,不报告通知、废弃方法、严格这几类错误
        case 'testing':
        case 'production':
            ini_set('display_errors', 0);
            if (version_compare(PHP_VERSION, '5.3', '>='))
            {
                error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
            }
            else
            {
                error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE);
            }
        break;
    
        default:
            header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
            echo 'The application environment is not set correctly.';
            exit(1); // EXIT_ERROR
    }

    PHP 预定义的错误常量

    官网定义了所有的 错误常量,常用的有:

    • E_STRICT (integer) PHP 对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。
    • E_ALL (integer) E_STRICT外的所有错误和警告信息。
    • E_ERROR (integer) 致命的运行时错误。这类错误一般是不可恢复的情况,例如内存分配导致的问题。后果是导致脚本终止不再继续运行。
    • E_WARNING (integer) 运行时警告 (非致命错误)。仅给出提示信息,但是脚本不会终止运行。
    • E_PARSE (integer) 编译时语法解析错误。解析错误仅仅由分析器产生。
    • E_NOTICE (integer) 运行时通知。表示脚本遇到可能会表现为错误的情况,但是在可以正常运行的脚本里面也可能会有类似的通知。

    在代码中开启并设置显示级别

    ini_set() 函数

    对于 PHP,可以通过 php.ini 文件设置各种指令。但有时候需要在脚本运行时设置指令,那就需要 ini_set() 函数了。

    string ini_set ( string $varname , string $newvalue )

    设置指定配置选项的值。这个选项会在脚本运行时保持新的值,并在脚本结束时恢复。

    例如:

    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 'on');

    error_reporting() 函数

    error_reporting() 函数能够在运行时设置 error_reporting 指令。 PHP 有诸多错误级别,使用该函数可以设置在脚本运行时的级别。如果没有设置可选参数, error_reporting() 会返回当前的错误报告级别。

    PHP7.2 的默认值为 E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

    在开发阶段建议启用 E_NOTICE 显示更多可能的错误。

    <?php
    
    // 关闭所有PHP错误报告,相当于 ini_set('error_reporting', 0);
    error_reporting(0);
    
    error_reporting(E_ERROR | E_WARNING | E_PARSE);
    
    // 报告 E_NOTICE  (报告未初始化的变量或捕获变量名的错误拼写)
    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    
    // 除了 E_NOTICE,报告其他所有错误
    error_reporting(E_ALL ^ E_NOTICE);
    
    // 报告所有 PHP 错误 (参见 changelog)
    error_reporting(E_ALL);
    
    // 报告所有 PHP 错误
    error_reporting(-1);
    
    // 和 error_reporting(E_ALL); 一样
    ini_set('error_reporting', E_ALL);

    修改 php.ini 配置文件

    error_reporting = E_ALL # 报告所有错误
    display_errors = On # 显示错误
  • 相关阅读:
    SAP C4C OBN(Object Based Navigation)不能工作的原因分析
    使用SAP C4C自定义BO association创建动态下拉列表
    如何使用SAP HANA Studio的PlanViz分析CDS view性能问题
    如何使用jMeter测试SAP OData服务并发访问时的性能
    OData服务在SAP CRM,Cloud for Customer和S/4HANA上的实现比较
    SAP UI5和Vue的数据双向绑定实现原理比较
    在SAP WebClient UI里显示倒数计时的UI
    【年度重磅】2020华为云社区年度技术精选合集,700页+免费下载!
    面试必问:如何实现Redis分布式锁
    聊聊架构模式的变迁:从分层架构到微服务架构
  • 原文地址:https://www.cnblogs.com/kika/p/10851583.html
Copyright © 2020-2023  润新知