PHP中error_reporting()⽤法详解
error_reporting() 函数规定报告哪个错误。该函数设置当前脚本的错误报告级别。该函数返回旧的错误报告级别。
⾸先要知道error_reporting()函数是⽤来设置错误级别并返回当前级别的。它有14个错误级别,如下:
1 E_ERROR 致命的运⾏时错误。错误⽆法恢复过来。脚本的执⾏被暂停
2 E_WARNING ⾮致命的运⾏时错误。脚本的执⾏不会停⽌
4 E_PARSE 编译时解析错误。解析错误应该只由分析器⽣成
8 E_NOTICE 运⾏时间的通知。
16 E_CORE_ERROR 在PHP启动时的致命错误。这就好⽐⼀个在PHP核⼼的E_ERROR
32 E_CORE_WARNING 在PHP启动时的⾮致命的错误。这就好⽐⼀个在PHP核⼼E_WARNING警告
64 E_COMPILE_ERROR 致命的编译时错误。这就像由Zend脚本引擎⽣成了⼀个E_ERROR
128 E_COMPILE_WARNING ⾮致命的编译时错误,由Zend脚本引擎⽣成了⼀个E_WARNING警告
256 E_USER_ERROR 致命的⽤户⽣成的错误。
512 E_USER_WARNING ⾮致命的⽤户⽣成的警告。
1024 E_USER_NOTICE ⽤户⽣成的通知。
2048 E_STRICT 运⾏时间的通知。
4096 E_RECOVERABLE_ERROR 捕捉致命的错误。
8191 E_ALL来所有的错误和警告。
好像php默认是不开启错误的,所以你需要配置php.ini⽂件:
将 display_errors = Off 改为display_errors = On
另外还要配置错误级别:将
error_reporting = E_ALL 改为:
error_reporting = E_ALL & ~E_NOTICE
应为php默认是显⽰所有错误的,⽽有些⽆害的提⽰我们不需要显⽰,所以设置如上!
也可以在php代码运⽤如下:
<?php
//禁⽤错误报告,也就是不显⽰错误
error_reporting(0);
//报告运⾏时错误
parse error怎么解决error_reporting(E_ERROR | E_WARNING | E_PARSE);
//报告所有错误
error_reporting(E_ALL);
>
使⽤⽰例:
今天学习CI框架过程中遇到个问题:
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: user
⼀般在默认的普通PHP⽂件中输出⼀个未定义声明的变量是不会报错误的,但在codeigniter框架下却要报错误,这对于想集成添加和修改页⾯于⼀体的”懒⼈”很不⽅便,由于是初学者开始还想怎么在代码中屏蔽这⼀错误提⽰呢.甚⾄⽤到了@,但听很多⼈都说@会⼤⼤降低性能….
最后突然想到,是不是codeigniter有意让这错误信息提⽰出来了呢,我们该如何去屏蔽掉这⼀类错误呢⽆意中搜索到了”如何让codeigniter不显⽰Notice信息?”,茅塞顿开.原来是⼊⼝index.php中的error_reporting(E_ALL);在作怪.只需要把它改成
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,即包含所有)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论