PHP中错误处理

错误处理

错误的分类

  • 语法错误:程序无法运行直接提示语法错误
  • 运行时错误(主要错误):程序运行到某行不满足要求(类似未定义变量)出现的错误
  • 逻辑错误:程序从头到尾运行无错误但结果错误,不符合逻辑

错误的分级

在PHP中,将各种错误依据不同的严重程度和产生的来源分为大约10几个级别,每个级别的错误对应一个内部的名称--系统常量

系统错误:

E_ERROR:系统严重错误,一旦发生程序立即停止执行

E_WARNING:系统警告,一发生,提示错误并继续执行

E_PARSE:语法错误,一发生提示错误,代码完全不运行

E_NOTICE:系统提示,一发生提示错误并继续执行

可见,这些系统错误只是一个系统内部常量(整数常量):实际上,这些常量(代号)是供我们对该类错误进行控制的标识符而已

用户自定义错误

只有3个:

E_USER_ERROR

E_USER_WARNING

E_USER_NOTICE

这些错误用于我们创建--为了针对某些数据的不合理情形而创建的错误

比如:用户填写年龄,当用户填写188就是不合理,可归为用户自定义错误

其他

E_ALL:代表所有错误--表示它可以“包括”错误

E_STRICT:代表“严格性”语法检查错误--某种语法可以执行,但在当前的PHP版本中已过时

错误的触发

正常触发

程序确实发生了运行错误--也可能是语法检查错误

3种常见的运行时错误

人工触发

有程序员通过程序代码产生一个错误

语法:trigger_error("错误提示",用户错误代号);

应用中判断数据的有效性,已决定是否触发相应错误

错误的显示控制

网页中显示(提示)错误信息是可以进行控制的,有两种途径:

1,在php.ini文件中设定,对所有PHP程序都有效

2,在当前脚本文件中,只对当前脚本文件有效

错误的显式有两个方面进行控制

php.ini中,display_errors = On;          //表示显示,off表示不显示

显示

脚本中:ini_set("display_errors",1)      //表示显示,off表示不显示,且脚本的设定优先级搞

 php.ini文件中:

error_reporting=E_NOTICE;                                                 //只显示E_NOTICE的错误

error_reporting=E_NOTICE | E_WARNING;                                                 //显示E_NOTICE和E_WARNING的错误

error_reporting=E_NOTICE | E_WARNING | E_USER_ERROR;          //显示E_NOTICE和E_WARNING和E_USER_ERROR的错误

解释上一行:

  • 设定是否显示:display_errors;
  • 设定显示哪些级别的错误--依赖于前者的显示
E_NOTICE:        0000000000001000
E_WARNING:       0000000000000010
E_USER_ERROR     0000000100000000
或运算(|)
————————————————————————————————————
                 0000000100001010

实际上,在开发阶段,常用:error_reporting = E_ALL | E_STRICT.结果如下:

E_ALL        0111011111111111
E_STRICT     0000100000000000
或运算(|)
——————————————————————————————————————
             0111111111111111

可见只有E_ALL并非“所有”,两者加起来才表示所有

在代码中设定:

ini_set("error_reporting",E_NOTICE);

ini_set("error_reporting",E_NOTICE | E_WARNING | E_USER_ERROR);

另一个对应函数:ini_get("设定项名称");

记录错误日志

在开发阶段:我们通常都是显示所有错误--意图解决错误

在产品阶段:我们通常都是隐藏所有错误--并同时将错误信息记录到文件中--错误日志文件(程序员可以查看错误解决方案)

记录的两种途径:

1,在php.ini文件中设定

 log_errors = On;                              //测定是否记录错误日志

error_log = "错误日志名"                 //设定错误日志文件名

此时该文件没有给定路径,则系统会在对应文件目录下建立该文件并记录

可见,页面中显示的错误提示内容与日志中的错误提示内容一样

        error_log还有一个特殊值可以使用:error_log = syslog        //此时不会记录错误日志文件,而是把错误日志记录到系统日志中

结果为:

事件查看器位置:

控制面板》管理工具(以大图标为查看方式)》事件查看器

2,在脚本中设定

Ini_set(“log_errors”,On);	//或者off
Ini_set(“error_log”,“error1.log”);	//文件名后缀识随便
Ini_set(“error_log”,“error2.text”);
Ini_set(“error_log”,syslog);	//记录到操作系统日志

自定义错误处理

前面的错误处理,归根结底只是将记录的位置改变。但是,自定义错误处理,可以让我们自己控制错误的提示内容

做法非常简单:

  1. 设定用来自定义错误处理的自定义函数名
  2. 自己定义该函数,并在其中进行任何错误信息的输出

做好后,系统一旦发生错误就会调用该函数执行其中的代码

测试以下代码:

结果显示:

说明:

  • 一旦使用自定义错误处理程序,则系统不再处理错误
  • 但:如果一旦发生严重错误(E_ERROR,E_USER_ERROR),则立即停止程序并也不调用自定义函数进行错误提示--其他错误处理能照样进行
  1. 在php.ini文件中设定;
  2. 在脚本中设定

猜你喜欢

转载自blog.csdn.net/su_yi_song/article/details/87533972