PHP的错误报错级别设置原理简析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

原理简析

摘录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);
 //只考虑致命的运行时错误、新解析错误和核心错误

相关文章
|
5月前
|
安全 PHP
从建站到拿站 -- PHP(Cookie设置)
从建站到拿站 -- PHP(Cookie设置)
42 0
|
16天前
|
应用服务中间件 Shell PHP
pbootcms模板报错提示PHP Warning: Unknown: open_basedir restriction
pbootcms模板报错提示PHP Warning: Unknown: open_basedir restriction
|
1月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
35 2
|
2月前
|
PHP
PHP——oneinstack重新安装PHP的时候报错
PHP——oneinstack重新安装PHP的时候报错
47 4
|
2月前
|
存储 算法 网络安全
二进制加密PHP Webshell原理及简单实现
二进制加密PHP Webshell原理及简单实现
80 8
|
2月前
|
SQL 程序员 PHP
PHP网页下的注入原理
PHP网页下的注入原理
|
2月前
|
PHP
PHP——安装ThinkPHP框架报错
PHP——安装ThinkPHP框架报错
21 0
|
3月前
|
算法 PHP
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
29 1
|
4月前
|
Ubuntu PHP Apache
蓝易云 - 如何在Ubuntu 22.04上安装PHP8.1并设置本地开发环境
以上就是在Ubuntu 22.04上安装PHP 8.1并设置本地开发环境的步骤。
327 2
|
4月前
|
PHP
php 使用phpize报错Cannot find config.m4. Make sure that you run ‘/usr/bin/phpize‘ in the top l
php 使用phpize报错Cannot find config.m4. Make sure that you run ‘/usr/bin/phpize‘ in the top l
212 1