error_reporting(E_ALL);//显示所有错误
error_reporting(E_ALL ^ E_NOTICE);//显示除去 E_NOTICE 之外的所有错误信息
这里可以理解
但是这个error_reporting(E_ALL || ~E_NOTICE);
这里的 || 是逻辑或 ~ 是位运算非。那么这句话翻译成什么呢? 所有错误,或者非E_NOTICE错误都提示
这样岂不是|| ~E_NOTICE部分就意义了,等同于所有错误都提示嘛,在网上我也搜索到了这种说法,但是这段代码出自dede,install/index.php中,他也不至于写这么段多余的代码吧
望高人指点,这是何用意?
2014-03-18 09:52
提问者采纳
我本人觉得error_reporting(E_ALL || ~E_NOTICE)和error_reporting(E_ALL)效果是一样的
都是显示所有错误,这个是dede 在开发阶段时为了显示所有错误用的。
用二进制说
E_ALL 是 1111111111111
E_NOTICE 是 0000000001000
~E_NOTICE是 1111111110111
定义和用法
error_reporting() 设置 PHP 的报错级别并返回当前级别。
语法
error_reporting(report_level)如果参数 level 未指定,当前报错级别将被返回。下面几项是 level 可能的值:
值 常量 描述 1 E_ERROR Fatal run-time errors. Errors that can not be recovered from. Execution of the script is halted 2 E_WARNING Non-fatal run-time errors. Execution of the script is not halted 4 E_PARSE Compile-time parse errors. Parse errors should only be generated by the parser 8 E_NOTICE Run-time notices. The script found something that might be an error, but could also happen when running a script normally 16 E_CORE_ERROR Fatal errors at PHP startup. This is like an E_ERROR in the PHP core 32 E_CORE_WARNING Non-fatal errors at PHP startup. This is like an E_WARNING in the PHP core 64 E_COMPILE_ERROR Fatal compile-time errors. This is like an E_ERROR generated by the Zend Scripting Engine 128 E_COMPILE_WARNING Non-fatal compile-time errors. This is like an E_WARNING generated by the Zend Scripting Engine 256 E_USER_ERROR Fatal user-generated error. This is like an E_ERROR set by the programmer using the PHP function trigger_error() 512 E_USER_WARNING Non-fatal user-generated warning. This is like an E_WARNING set by the programmer using the PHP function trigger_error() 1024 E_USER_NOTICE User-generated notice. This is like an E_NOTICE set by the programmer using the PHP function trigger_error() 2048 E_STRICT Run-time notices. PHP suggest changes to your code to help interoperability and compatibility of the code 4096 E_RECOVERABLE_ERROR Catchable fatal error. This is like an E_ERROR but can be caught by a user defined handle (see also set_error_handler()) 8191 E_ALL All errors and warnings, except level E_STRICT (E_STRICT will be part of E_ALL as of PHP 6.0) 例子
任意数目的以上选项都可以用“或”来连接(用 OR 或 |),这样可以报告所有需要的各级别错误。例如,下面的代码关闭了用户自定义的错误和警告,执行了某些操作,然后恢复到原始的报错级别:
<?php //禁用错误报告 error_reporting(0); //报告运行时错误 error_reporting(E_ERROR | E_WARNING | E_PARSE); //报告所有错误 error_reporting(E_ALL); ?>
在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 - 用户产生的提醒消息
使用方法:
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);//显示所有错误