错误处理

Posted zhony

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误处理相关的知识,希望对你有一定的参考价值。

错误报告级别

php程序的错误一般归属于下列三个领域:
语法错误:

1 语法错误最常见,并且也容易修复。如:代码中遗漏一个分号。这类错误会阻止脚本的执行。

运行时错误:

1 这种错误一般不会阻止PHP脚本的执行,但会阻止当前要做的事情。输出一条错误,但php脚本继续执行

逻辑错误:

1 这种错误最麻烦,既不阻止脚本执行,也不输出错误消息。

图解Apache web服务器与PHP引擎的关系

技术分享图片

案例:

 1 //语法错误,忘记加分号
 2 echo "123" 
 3 //运行时错误
 4 echo ‘123‘;
 5 function demo(){
 6   echo ‘456‘;
 7 }
 8 laoliu();
 9 //逻辑错误,想要输出隔壁王,结果出现的是帽,在系统?度看,这并不是错误。
10 if(1==1){
11  echo "帽子"12 }else{
13  echo "隔壁王"14 }

在PHP系统中,到底有哪些错误报告级别?
在php.ini中可以找到错误级别的说明和设置。

1 //表示打开所有错误提示但屏蔽NOTICE错误
2 error_reporting = E_ALL & ~E_NOTICE
3 //直接关闭所有错误提示,开发阶段一般是on,但上线以后一般会选择off
4 display_errors = off/on 

技术分享图片

 

1 //错误值一般都是系统定义好的常量
2 echo E_ERROR; //1
3 //1 2 4 8 ... 6143原理
4 //利用的二进制,采用亮灯的原理,错了就亮。
5 //000000000001 ---> 就是第一个错误

在实际的开发中,没有人关注什么错误级别错误值什么的,报错了,看一眼大概啥类型的,直接找
BUG就行了。

在实际的开发中,我们其实需要做大量的错误处理,写功能比较容易,无非就是增删改查,就像汽
车,让一辆汽车开起来并不难,但如果要做各种安全防护,就要麻烦的多,考虑的因素也非常多,说
明书厚的跟字典一样。

 

调整错误报告级别

动态设置PHP错误信息是否输出,只在当前脚本生效,并不会影响php.ini全局的设置。

display_errors: 是否开启PHP输出错误报告的功能
值为:On(默认输出错误报告)、 Off(屏蔽所有错误信息)
在PHP脚本中可调用ini_set( )函数,动态设置php.ini配置文件.
如:ini_set("display_errors","On"); //显示所有错误信息

1 //设置是否输出错误信息
2 ini_set(‘display_errors‘,"off");//关闭
3 ini_set(‘display_errors‘,"on");//开启
4 ini_set(‘display_errors‘,0);//关闭
5 ini_set(‘display_errors‘,1);//开启
6 //调用函数进行试验
7 aa();

error_reporting: 设置不同的错误报告级别。
error_reporting = E_ALL & ~E_NOTICE

-- 可以抛出任何非注意的错误,默认值
error_reporting = E_ERROR | E_PARSE | E_CORE_ERROR
-- 只考虑致命的运行时错误、新解析错误和核心错误。

error_reporting = E_ALL & ~(E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE)
-- 报告除用户导致的错误之外的所有错误。
在PHP脚本可以通过error_reporting( )函数动态设置错误报告级别。如:error_reporting(E_ALL);

1 //动态设置错误等级
2 error_reporting(E_ALL);
3 //试验,报所有错误
4 echo $a;
5 //开启除了notice以外的所有错误
6 error_reporting(E_ALL & ~E_NOTICE);
7 echo $a;

案例:

 1 ini_set(‘display_errors‘,1);//开启
 2 error_reporting(E_ALL);//开启所有错误
 3 $sum=0;//此处如果屏蔽掉,初次使?sum时,变量未定义会notice报错
 4 for($i=0,$i<=10,$i++){
 5   $sum+=$i;
 6 }echo $sum;
 7 
 8 strlen();//字符串长度函数,不给参数,报warning警告错误,不会影响程序执行
 9 echo "aaaaaaaa";
10 aa();//致命错误,调用一个不存在的函数时程序会终止

PHP日志的记录方式

1)采用文件记录。(推荐使用)

  先配置php.ini文件

1 error_reporting = E_ALL //将向PHP发送每个错误
2  display_errors=Off //不显示错误报告
3  * log_errors=On //决定日志语句记录的位置
4  log_errors_max_len=1024 //每个日志项的最大长度
5  * error_log=G:/myerror.log //指定错误写进的文件

试验:

1 a();//注意观察日志文件
2 conunt();//注意观察日志文件

以上记录的是系统报错的日志。

我能不能做一个用户操作的人为的日志?

使用函数:在php文件中使用error_log()来记录日志,就可以将信息写入到myerror.log文件中

1 error_log("用户xxx想删除ID为69的用户名,已经记录到日志,请注意这个小子");

trigger_error()函数记录日志

使用error_log()报一个自定义的错误信息,让系统记录,只记录信息

而使用trigger_error()比error_log更加灵活一些,可指定等级和文件位置。

1 //可利用系统提供的错误等级给日志记录自己定义好的错误信息,默认为notic级别
2 trigger_error("用户xxx想删除ID为69的用户名,已经记录到日志,请注意这个小子",E_USER_ERROR);

 

2) 错误日志记录到操作系统日志中。

先配置php.ini文件

1 error_reporting = E_ALL //将向PHP发送每个错误
2  * display_errors=Off //不显示错误报告
3  * log_errors=On //决定日志语句记录的位置
4  log_errors_max_len=1024 //每个日志项的最大长度
5  * error_log=syslog //指定错误写进的文件

使用四个函数来记录日志:

//define_syslog_variables(); 为系统日志初始化配置
//openlog(); 打开一个日志链接
//syslog(); 发送一条日志记录
//closelog(); 关闭日志链接

如何查看window系统日志

计算机右键 ---> 管理(G) ---> 系统?具 ---> 事件查看器 ---> Windows 日志 ---> 应用程序

技术分享图片

 

为什么要做日志记录?

1 1.方便自己开发的时候查询,框架一般都自带日志功能,只需要开启就OK。
2 2.可以借助运行日志开发相应的后台日志功能,给管理员查询,方便管理。













以上是关于错误处理的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个代码片段说包含错误?

在下面的代码片段中的剩余 ='passthrough' 处的代码中出现语法错误

如何向 ViewPager 提供许多片段并避免错误代码?

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”

Java异常处理机制

处理屏幕旋转上的片段重复(带有示例代码)