zoukankan      html  css  js  c++  java
  • PHP的错误报错级别设置原理简析

    原理简析

    摘录php.ini文件的默认配置(php5.4):

    ; Common Values:
    ;   E_ALL (Show all errors, warnings and notices including coding standards.)
    ;   E_ALL & ~E_NOTICE  (Show all errors, except for notices)
    ;   E_ALL & ~E_NOTICE & ~E_STRICT  (Show all errors, except for notices and coding standards warnings.)
    ;   E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)
    
    ; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
    ; Development Value: E_ALL
    ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
    
    ; http://php.net/error-reporting
    
    error_reporting = E_ALL & ~E_NOTICE
    

    默认是E_ALL & ~E_NOTICE。这句话的意思是Show all errors, except for notices,即显示除了NOTICE类型的所有错误。为什么运算符是& ~呢?

    先看PHP手册预定义常量
    摘录一部分常量:

    值       常量                              说明
    1       E_ERROR ( integer )         致命的运行时错误。这类错误一般是不可恢复的情况,例如内存分配导致的问题。后果是导致脚本终止不再继续运行。 
    2       E_WARNING ( integer )       运行时警告 (非致命错误)。仅给出提示信息,但是脚本不会终止运行。 
    4       E_PARSE ( integer )         编译时语法解析错误。解析错误仅仅由分析器产生。
    8       E_NOTICE ( integer )        运行时通知。表示脚本遇到可能会表现为错误的情况,但是在可以正常运行的脚本里面也可能会有类似的通知。 
    16      E_CORE_ERROR ( integer )    在PHP初始化启动过程中发生的致命错误。该错误类似 E_ERROR ,但是是由PHP引擎核心产生的。 
    2048    E_STRICT ( integer )        启用 PHP 对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。 
    30719   E_ALL ( integer )           E_STRICT 出外的所有错误和警告信息。 
    

    E_ALL:30719 in PHP 5.3.x, 6143 in PHP 5.2.x, 2047 previously
    上面的值(数值或者符号)用于建立一个二进制位掩码,来制定要报告的错误信息。可以使用按位运算符来组合这些值或者屏蔽某些类型的错误。请注意,在 php.ini 之中,只有'|', '~', '!', '^' 和 '&' 会正确解析。

    看下面的分析:

    E_ALL & ~E_NOTICE
    => 111011111111111 & ~ 1000
    => 111011111111111 & 0111
    => 111011111110111
    

    估计看了上面大家就知道是怎么回事了,为什么不是E_ALL & E_NOTICE
    & ~E_NOTICE刚好使第四位的值置0。如果去掉~则达不到效果。

    调整错误报告级别

    1、可以修改php.ini进行配置,找到error_reporting
    2、ini_set()error_reporting()

     ini_set('display_errors', 1); 
     error_reporting(E_ALL & ~E_NOTICE);//排除NOTICE错误
     
     error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR);
     //只考虑致命的运行时错误、新解析错误和核心错误
    
  • 相关阅读:
    LOJ#2244 起床困难综合症
    CF集萃2
    LOJ#2085 循环之美
    LOJ#2087 国王饮水记
    LOJ#2304 泳池
    人生中十个重要的健康伴侣
    web容器和servlet容器
    有关服务器,web 服务器,WEB容器的一点总结
    学习Java需要达到的25个目标
    EJB 规范
  • 原文地址:https://www.cnblogs.com/52fhy/p/4938962.html
Copyright © 2011-2022 走看看