【php技术】PHP错误类型和屏蔽方法
作者:简单生活 来源:本站 发表时间:2016-10-30 08:58:12 查看:7 次
一、php的错误类型
首先,我们需要知道的是怎么才能显示我们的错误:
通过在代码中添加两行代码:
1.显示除E_STRICT外的所有错误和警告信息
error_reporting(E_ALL);
2. 是否把错误展示在输出上
ini_set(‘display_errors‘, ‘On‘);
有了以上两部操作,我们就可以把我们的错误信息展示在页面上了。
第二,我们需要知道php有哪些错误类型:
根据中文官方文档,共有16个错误级别:
地址:http://php.net/manual/zh/errorfunc.constants.php
在文档中已经非常清楚的描述错误的级别和出错的原因,这里我们选择几个比较有代表性的错误,给大家详细说明:
1. E_ERROR
致命的运行时错误。这类错误一般是不可恢复的情况,例如内存分配导致的问题。后果是导致脚本终止不再继续运行。页面上通常会显示Fatal Error,出现这种错误的原因可能为:访问不存在此函数代码、服务器执行时间超时、调用了不存在的类代码等等
如:类不存在
$goodsModel = new Goods();
Fatal error: Class ‘Goods‘ not found in D:\web\error.php on line 3
2. E_PARSE
编译时语法解析错误。解析错误仅仅由分析器产生。这种语法错误采用专业的IDE就可以很好的避免,诸如phpstorm,zend studio等等。
如:没有设置变量值
$a = ;
Parse error: syntax error, unexpected ‘;‘ in D:\web\error.php on line 3
3. E_WARNING
运行时警告 (非致命错误)。仅给出提示信息,但是脚本不会终止运行。
如:
include ‘xxx.php‘;
echo ‘继续运行‘;
Warning: include(xxx.php): failed to open stream: No such file or directory in D:\web\error.php on line 3
Warning: include(): Failed opening ‘xxx.php‘ for inclusion (include_path=‘.;C:\php\pear‘) in D:\web\error.php on line 3
继续运行
4. E_NOTICE
运行时通知。表示脚本遇到可能会表现为错误的情况,但是在可以正常运行的脚本里面也可能会有类似的通知。这种错误的级别稍微低一些。
如:
echo $c;
Notice: Undefined variable: c in D:\web\error.php on line 8
5. E_DEPRECATED
运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。
如:
当我们使用PHP5.5(或更高)时,如果使用mysql_connect(()函数连接数据库时就会报错,建议使用更新的MySQL连接方式
$conn = mysql_connect(‘localhost‘,‘root‘,‘admin‘);
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in D:\web\error.php on line 4
还有很多的错误类型,大家可以通过文档了解更多。
二、屏蔽方法
1、屏蔽某个函数错误信息
使用@符号,可以屏蔽某个函数错误信息,这是就不会报错。
如:
$conn = @mysql_connect(‘localhost‘,‘root‘,admin);
2、屏蔽某个类型的错误
2.1 在代码中屏蔽
语法:error_reporting(E_ALL ^ 错误常量) 或 error_reporting(E_ALL & ~错误常量)
如:
error_reporting(E_ALL ^ E_DEPRECATED);
$conn = mysql_connect(‘localhost‘,‘root‘,‘admin‘);
2.2 在配置文件php.ini中屏蔽
语法:error_reporting = E_ALL & ~错误常量
如:
error_reporting = E_ALL & ~ E_DEPRECATED & ~ E_NOTICE
3、屏蔽所有错误
方式:
在代码中error_reporting(0) 或者 修改配置文件error_reporting = 0
但是我们在工作中一般建议不关闭所有报错,而是通过日志的方式记录所有错误信息,不在页面中展示错误信息。之后我会给大家介绍怎么捕捉错误并记录日志。