错误处理
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' 处的代码中出现语法错误
错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”