关于php error_reporting 的分析理解

转载自: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)

&就是与的意思 |就是或的意思 与和或就不用说了吧

if(!function_exists('mysql_pconnect')){ function mysql_pconnect($dbhost, $dbuser, $dbpass){ global $dbport; global $dbname; global $linkid; $linkid = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); return $linkid; } function mysql_select_db($dbname){ global $linkid; return mysqli_select_db($linkid,$dbname); } function mysql_fetch_array($result, $type=''){ if ($type) { return mysqli_fetch_array($result, $type); }else{ return mysqli_fetch_array($result); } } function mysql_fetch_assoc($result){ return mysqli_fetch_assoc($result); } function mysql_fetch_row($result){ return mysqli_fetch_row($result); } function mysql_free_result($result){ return mysqli_free_result($result); } function mysql_query($cxn){ global $linkid; return mysqli_query($linkid,$cxn); } function mysql_insert_id(){ global $linkid; return mysqli_insert_id($linkid); } function mysql_affected_rows(){ global $linkid; return mysqli_affected_rows($linkid); } function mysql_escape_string($data){ global $linkid; return mysqli_real_escape_string($linkid, $data); } function mysql_real_escape_string($data){ global $linkid; return mysqli_real_escape_string($linkid, $data); } function mysql_close(){ global $linkid; return mysqli_close($linkid); } function mysql_get_server_info(){ global $linkid; return mysqli_get_server_info($linkid); } function mysql_num_rows($result){ return mysqli_num_rows($result); } } error_reporting(E_ERROR | E_PARSE); error_reporting(E_ALL ^ E_WARNING); error_reporting(E_ALL & ~E_NOTICE); error_reporting(E_ALL ^ E_DEPRECATED);给代码加上注释
06-06
以下是对代码的注释: ```php if(!function_exists('mysql_pconnect')){ // 自定义 mysql_pconnect 函数 function mysql_pconnect($dbhost, $dbuser, $dbpass){ // 全局变量 global $dbport; global $dbname; global $linkid; // 使用 mysqli_connect 连接数据库 $linkid = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); return $linkid; } // 自定义 mysql_select_db 函数 function mysql_select_db($dbname){ // 全局变量 global $linkid; // 使用 mysqli_select_db 选择数据库 return mysqli_select_db($linkid,$dbname); } // 自定义 mysql_fetch_array 函数 function mysql_fetch_array($result, $type=''){ // 如果传入 $type,则使用 mysqli_fetch_array 函数并返回 if ($type) { return mysqli_fetch_array($result, $type); } // 否则使用 mysqli_fetch_array 函数并返回 else{ return mysqli_fetch_array($result); } } // 自定义 mysql_fetch_assoc 函数 function mysql_fetch_assoc($result){ return mysqli_fetch_assoc($result); } // 自定义 mysql_fetch_row 函数 function mysql_fetch_row($result){ return mysqli_fetch_row($result); } // 自定义 mysql_free_result 函数 function mysql_free_result($result){ return mysqli_free_result($result); } // 自定义 mysql_query 函数 function mysql_query($cxn){ // 全局变量 global $linkid; // 使用 mysqli_query 函数查询数据库 return mysqli_query($linkid,$cxn); } // 自定义 mysql_insert_id 函数 function mysql_insert_id(){ // 全局变量 global $linkid; // 使用 mysqli_insert_id 函数获取最后插入的 ID return mysqli_insert_id($linkid); } // 自定义 mysql_affected_rows 函数 function mysql_affected_rows(){ // 全局变量 global $linkid; // 使用 mysqli_affected_rows 函数获取受影响的行数 return mysqli_affected_rows($linkid); } // 自定义 mysql_escape_string 函数 function mysql_escape_string($data){ // 全局变量 global $linkid; // 使用 mysqli_real_escape_string 函数转义字符串 return mysqli_real_escape_string($linkid, $data); } // 自定义 mysql_real_escape_string 函数 function mysql_real_escape_string($data){ // 全局变量 global $linkid; // 使用 mysqli_real_escape_string 函数转义字符串 return mysqli_real_escape_string($linkid, $data); } // 自定义 mysql_close 函数 function mysql_close(){ // 全局变量 global $linkid; // 使用 mysqli_close 函数关闭连接 return mysqli_close($linkid); } // 自定义 mysql_get_server_info 函数 function mysql_get_server_info(){ // 全局变量 global $linkid; // 使用 mysqli_get_server_info 函数获取 MySQL 服务器信息 return mysqli_get_server_info($linkid); } // 自定义 mysql_num_rows 函数 function mysql_num_rows($result){ // 使用 mysqli_num_rows 函数获取结果集中的行数 return mysqli_num_rows($result); } } // 设置错误报告级别 error_reporting(E_ERROR | E_PARSE); // 不显示警告和通知 error_reporting(E_ALL ^ E_WARNING); // 显示错误和通知,不显示警告 error_reporting(E_ALL & ~E_NOTICE); // 显示错误和警告,不显示通知 error_reporting(E_ALL ^ E_DEPRECATED); // 显示错误和通知,不显示弃用的函数警告 ``` 注释是用来解释代码的作用和意图,方便其他开发人员理解和维护代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值