PHP错误处理

三十三、错误处理

错误的分类

初始化错误

  • 警告错误
  • 致命错误

编译时错误

程序运行之前都要先编译。如果语法有错误,就会立即报错,且不会去执行程序。

  • 语法错误

  • 警告错误

  • 致命错误

运行时错误

就是在程序语法检查通过后,,开始运行程序并在此过程中遇到的错误。

  • 通知错误
  • 警告错误
  • 致命错误

用户自定义的错误

  • 通知信息
  • 警告信息
  • 错误信息

错误的分级

php语言中,将各种错误进行了不同级别的分类归纳,并形成大约有10几个级别的错误,这就是技术层面的错误分级。

每一级别的错误,都有一个”代号”,这个代号其实也就是一个系统内部的”常量而已”。比如:

系统常见错误:

  • E_ERROR: 致命错误
  • E_WARNING: 警告性错误
  • E_NOTICE: 提示性错误

用户可自定义的错误:

  • E_USER_ERROR: 自定义致命错误

  • E_USER_WARNING: 自定义警告性错误

  • E_USER_NOTICE: 自定义提示性错误

其他:

  • E_STRICT: 严谨性语法检查错误

  • E_ALL 代表”所有错误”。

错误的触发

错误的触发,就是让错误”发生”。

有两种方式会触发错误:

系统触发

程序运行到某行代码,确实出现了某种错误,此时系统就会报错——这就是触发了系统错误。

系统触发的典型错误有这3种:

E_NOTICE: 提示性错误,会输出错误提示,并继续执行后续代码;

比如使用不存在的变量或常量:

E_WARNING: 警告性错误,会输出错误提示,并继续执行后续代码(也可能看具体情况,比如require)

比如include载入一个不存在的文件:

E_ERROR: 致命错误 ,导致程序无法执行后续语句;

比如调用一个不存在的函数!

自定义触发

当我们处理某些数据的时候,本来数据本身是没有错误的,但根据具体应用(业务)的需要,会要求数据满足某种条件,而该数据并不满足的时候,我们就可以在程序中”主动”去触发(创建)一个错误,以表明该数据的”非法性”。

语法形式:

1
trigger_error("错误提示信息内容", 3中用户错误代号之一);

其中触发了用户的致命错误(E_USER_ERROR),也会终止程序的后续执行。

错误报告的显示

所谓错误报告,就是显示在网页上的错误提示内容!

是否显示错误报告(display_errors)

==有2种做法可以来设定是否显示:==

方法1:

在php.ini文件中,设定display_errors的值,为on(显示),或为off(不显示)

方法2:

直接在php的脚本文件中设使用函数ini_set()来对其进行设置:

显示哪些级别的错误报告(error_reporting)

显然,前提是”display_errors”要设置为On(或1),表示可以显示。

==显示哪些级别的错误报告,也有2个做法:==

做法1:

在php.ini文件中配置

做法2:

在当前的脚本代码中配置

在当前脚本使用ini_set()函数来设置

是否记录(log_errors)

php.ini中:

log_errors = On 或 Off

脚本中:

ini_set(“log_erros”, 1); 或 0

补充一句:

1:ini_set(“php配置项”, 值); //用于脚本中设置php.ini中是某项的值。

2:\$v1 = ini_get(“php配置项”); //用于获取php.ini中是某项的值

记录到哪里(error_log)

直接使用一个文件名,此时系统会自动在每个文件夹下都建立该文件名,并用其记录该文件夹下的所有网页文件发生的错误信息。