错误的分类
语法错误:程序没法运行,直接提示语法错误
运行时错误:只有程序运行到某行,或在某些特定的情形下运行时才会发生的错误(主要面对)
逻辑错误:程序从头到尾都没有发生(并提示)错误,但程序运行结果错误
错误分级
每个级别的错误,对应一个内部的名称—系统常量
系统错误:E_ERROR(严重错误,一发生,系统立即停止)、E_WARNING、E_NOTICE
E_ERROR=1(系统错误)
E_WARNING=2(系统警告)
E_PARSE=4(语法错误)
E_NOTICE=8(系统提示)
(系统内部的整数常量,这些常量是我们对该类错误进行控制的标识符)
用户自定义错误
只有3个:E_USER_ERROR、E_USER_ WARNING、E_USER_ NOTICE
可以在程序中,自己创建错误---是为了针对某些数据的不合理情形,而创建的错误(如年龄超过188等)
其他
E_ALL:代表所有错误
E_STRICT:代表严格性语法错误(当前php版本可执行但不欢迎使用)
错误的触发
正常触发:程序执行过程中体现出来
人工触发:程序员通过程序代码而产生的一个错误
trigger_error(“错误描述信息”,用户错误代号);
显示错误报告
display_errors:控制是否显示
error_reporting:控制显示哪些级别的错误
控制的方式有两种:
Php.ini文件中:对系统中所有运行的php程序都有效
display_errors=On/Off
error_reporting= E_NOTICE (只显示notice这一级别错误提示)
error_reporting= E_NOTICE | E_WARNING(显示notice和warning一级别错误提示)
error_reporting= E_NOTICE & E_WARNING(什么都不显示)
error_reporting= E_ALL(显示所有,但不包含strict错误)
error_reporting= E_ALL | E_STRICT(显示所有错误,开发中最常用)
如果在显示所有错误的基础上,关闭个别错误,与状态设定(关闭)的原理一致,在显示所有错误的基础上将个别错误取反并做按位与运算
在网页代码中,只影响当前的网页代码(优先级别高)
ini_set(“控制项”,值);(几乎可以设定所有php.ini中的设定项 ini_get(“设定项名称”)用户获取某项的值)
示例: ini_set(“display_errors”,1);//1表示显示,0表示不显示
ini_set(“error_reporting”, E_NOTICE);(只显示notice这一级别错误提示)
记录错误日志(2种途径)
log_errors:控制是否记录错误日志
error_log:控制错误日志记录到哪里,给定一个文件名就可以
一个特殊值:syslog,会记录到操作系统日志中,而不会记录到文件
Php.ini中:
log_errors=On
error_log=“错误日志文件名”(没有给定路径,系统会在每个文件夹下建立文件并记录进去)
当前文件中使用ini_set(“log_errors”,On);
自定义错误处理器
就是自己控制错误的显示内容和记录内容
分两步完成:
1.设定自定义错误处理函数
set_error_handler(“函数名”);
2.定义该函数(并通常需要设定4个参数)
function error_handler($errNo,$errMsg,$errFile,$errLine){
// 处理该4个参数
}
注意:该函数无需手工调用,出错时会自动调用;一旦用自定义错误,则系统不在出错误处理;如果系统发生严重错误,则不会调用自定函数,由系统处理(显示并终止)