在php中我们对错误的处理会常用到error_reporting函数,大家可以看到最多的是error_reporting(E_ALL ^ E_NOTICE),这个到底什么意思呢,下面我来来看看.
我们在程序中可能经常看到这么一个函数,代码如下:
- function setErrorReporting()
- {
-
- if (DEV_ENV == true) {
- ini_set("error_reprorting", "E_ALL & ~E_NOTICE");
- ini_set("display_errors", "on");
- } else {
- error_reporting(E_ALL);
- ini_set('display_errors', 'Off');
- ini_set("log_errors" , "On");
- ini_set('error_log', '/var/log/phperror.log');
-
- }
- }
举例说明:在Windows环境下,原本在php4.3.0中运行正常的程序,在4.3.1中为何多处报错,大体提示为:Notice:Undefined varialbe:变量名称.
例如有如下的代码:
- if (!$tmp_i) {
- $tmp_i=10;
- }
在4.3.0中运行正常,在4.3.1中运行会提示Notice:Undefined varialbe:tmp_i
问题如下:
1.问题出在哪里?
2.应如何修改这段代码?
3.不改段代码,如何修改php.ini中的设置使原来在4.3.0中的程序在4.3.1的环境下运行正常而不出现这个错误提示.
解决办法:在程序开头加一句:
error_reporting(E_ALL & ~E_NOTICE); 或error_reporting(E_ALL ^ E_NOTICE);
或者修改php.ini:error_reporting = E_ALL & ~E_NOTICE
有关error_reporting()函数:error_reporting() 设置 PHP 的报错级别并返回当前级别.
; 错误报告是按位的。或者将数字加起来得到想要的错误报告等级
; E_ALL - 所有的错误和警告
; E_ERROR - 致命性运行时错
; E_WARNING - 运行时警告(非致命性错)
; E_PARSE - 编译时解析错误
; E_NOTICE - 运行时提醒(这些经常是是你的代码的bug引起的,也可能是有意的行为造成的,(如:基于未初始化的变量自动初始化为一个空字符串的事实而使用一个未初始化的变量)
; E_CORE_ERROR - 发生于PHP启动时初始化过程中的致命错误
; E_CORE_WARNING - 发生于PHP启动时初始化过程中的警告(非致命性错)
; E_COMPILE_ERROR - 编译时致命性错
; E_COMPILE_WARNING - 编译时警告(非致命性错)
; E_USER_ERROR - 用户产生的出错消息
; E_USER_WARNING - 用户产生的警告消息
; E_USER_NOTICE - 用户产生的提醒消息
E_NOTICE 表示一般情形不记录,只有程式有错误情形时才用到,例如企图存取一个不存在的变数,或是呼叫 stat() 函式检视不存在的档案.
E_WARNING 通常都会显示出来,但不会中断程式的执行,这对除错很有效,例如,用有问题的常规表示法呼叫 ereg().
E_ERROR 通常会显示出来,亦会中断程式执行,意即用这个遮罩无法追查到记忆体配置或其它的错误.
E_PARSE 从语法中剖析错误.
E_CORE_ERROR 类似 E_ERROR,但不包括 PHP 核心造成的错误.
E_CORE_WARNING 类似 E_WARNING,但不包括 PHP 核心错误警告.
使用方法:
error_reporting(0);//禁用错误报告
error_reporting(E_ALL ^ E_NOTICE);//显示除去 E_NOTICE 之外的所有错误信息
error_reporting(E_ALL^E_WARNING^E_NOTICE);//显示除去E_WARNING E_NOTICE 之外的所有错误信息.
error_reporting(E_ERROR | E_WARNING | E_PARSE);//显示运行时错误,与error_reporting(E_ALL ^ E_NOTICE);效果相同,error_reporting(E_ALL);//显示所有错误.
error_reporting(0)
error_reporting(255);是列出所有提示:
error_reporting(0);是不显示所有提示
建议使用:error_reporting(7);
只显示严重错误:
1 E_ERROR 致命的运行时错误
2 E_WARNING 运行时警告(非致命性错误)
4 E_PARSE 编译时解析错误
8 E_NOTICE 运行时提醒(经常是bug,也可能是有意的)
16 E_CORE_ERROR PHP启动时初始化过程中的致命错误
32 E_CORE_WARNING PHP启动时初始化过程中的警告(非致命性错)
64 E_COMPILE_ERROR 编译时致命性错
128 E_COMPILE_WARNING 编译时警告(非致命性错)
256 E_USER_ERROR 用户自定义的致命错误
512 E_USER_WARNING 用户自定义的警告(非致命性错误)
1024 E_USER_NOTICE 用户自定义的提醒(经常是bug,也可能是有意的)
2048 E_STRICT 编码标准化警告(建议如何修改以向前兼容)
4096 E_RECOVERABLE_ERROR 接近致命的运行时错误,若未被捕获则视同E_ERROR
6143 E_ALL 除E_STRICT外的所有错误(PHP6中为8191,即包含所有). |