转载自:http://lovebaoyu.blog.163.com/blog/static/176491235201118104917339/
今天在看dedecms源代码的时候,再common.inc.php中发现第一个函数error_reporting() ,以前也看了不少代码,几乎都设置了这个函数,对于这个函数也了解一点,但是今天想深入的了解一下它!
error_reporting(report_level) 设置 PHP 的报错级别并返回当前级别。如果report_level没有指定,那么就是当前默认级别,这里所指的默认级别是指你的php.ini中设置的error_reporting 的级别,下面来列举下所有report_level 参数项:
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
2047 E_ALL
2048 E_STRICT
在这里我不一一介绍了,介绍几个比较常用的,首先是E_NOTICE ,E_NOTICE 表示一般情形不记录,只有程式有错误情形时才用到,下面我举个例子,
比如:
<?php
error_reporting(E_ALL);
print_r($a);
?>
这个例子中涉及到了E_ALL,E_ALL是指所有的大大小小的错误或者提示都报告,我们执行下这段代码,会发现
Notice: Undefined variable: a in ......这样的提示,因为我们没有定义$a,就把它输出时不合理的,但是这不是一个错误。
下面看这段代码:
<?php
error_reporting(E_ALL & ~E_NOTICE);
print_r($a);
?>
E_ALL & ~E_NOTICE它的意思是只有代码出现错误,才会出现提示,那么再执行下这段代码,看看输出的是空白,原来的提示就没有了。。。
E_ERROR 通常会显示出来,亦会中断程式执行。意即用这个遮罩无法追查到记忆体配置或其它的错误。
E_WARNING 通常都会显示出来,但不会中断程式的执行。这对除错很有效。例如:用有问题的常规表示法呼叫 ereg()。
E_PARSE 从语法中剖析错误。
E_CORE_ERROR 类似 E_ERROR,但不包括 PHP 核心造成的错误。
E_CORE_WARNING 类似 E_WARNING,但不包括 PHP 核心错误警告。
其他的一些选项我在这里就不一一列出来了,用到的可以去查手册。
下面我们来说说连接符,按照手册上的说法,
任意数目的以上选项都可以用“或”来连接(用 OR 或 |),这样可以报告所有需要的各级别错误。、
在手册上是这样使用的:error_reporting(E_ERROR | E_WARNING | E_PARSE);
在dedecms上是这样使用的:error_reporting(E_ALL || ~E_NOTICE);
在我使用的php.ini文件中是这样使用的:error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
在一些其他的程序中还有这样使用的 error_reporting(2039);
数字是根据位的与和或得来的,比如2039=2047(E_ALL)& ~8 (E_NOTICE)
&就是与的意思 |就是或的意思 与和或就不用说了吧