常见的三种错误:
1.Notice :通知性错误,最小的错误,当发生通知性错误时,会弹出一个提示信息。不会中断代码的执行。
错误代码:
#例如
Notice: in I:\www\abc\error.php on line
2.Warning:警告性错误,当发生警告性错误后,会弹出一个警告信息,他不会中断程序向下运行。
#例如
Warning: in I:\www\abc\error.php on line
3.Error:致命性错误,当发生致命性错误后,会弹出一个致命错误信息,中断程序执行。
#例如
Fatal error: in I:\www\abc\error.php on line
上面是常见的3中PHP中的错误,跟多详细错误看下面代码:
#查看更多错误,可以调用系统函数get_defined_constants这个函数
#简答的展示一些: echo "<pre>";
var_dump(get_defined_constants()); array() {
["E_ERROR"]=>
int()
["E_RECOVERABLE_ERROR"]=>
int()
["E_WARNING"]=>
int()
["E_PARSE"]=>
int()
["E_NOTICE"]=>
int()
["E_STRICT"]=>
int()
["E_DEPRECATED"]=>
int()
["E_CORE_ERROR"]=>
int()
["E_CORE_WARNING"]=>
int()
["E_COMPILE_ERROR"]=>
int()
["E_COMPILE_WARNING"]=>
int()
["E_USER_ERROR"]=>
int()
["E_USER_WARNING"]=>
int()
["E_USER_NOTICE"]=>
int()
["E_USER_DEPRECATED"]=>
int()
["E_ALL"]=>
int()
["DEBUG_BACKTRACE_PROVIDE_OBJECT"]=>
int()
["DEBUG_BACKTRACE_IGNORE_ARGS"]=>
int()
["TRUE"]=>
bool(true)
["FALSE"]=>
bool(false)
["NULL"]=>];
~~~~还有更多。
错误的触发:
可以分为两种:
1.系统自动触发
系统自动检查程序的编译以及执行,在出错的时候,自动给出错误提示。
2.手动触发:
PHP中手动触发可以调用系统函数,一般用来调试相应的错误程序,一般是用户级别的错误。
触发的函数:trigger_error
第一个参数可以设置错误提示信息,第二个参数可以设置错误的级别
E_USER_NOTICE:触发通知级别错误,最低级别的用户错误
E_USER_WARNING:触发警告级别的错误,后续代码继续执行
E_USER_ERROR:触发致命错误级别的错误,后续代码终止执行。
错误显示开关:
在php.ini中配置display_errors选项,默认为on,显示错误提示,在开发阶段建议设置on,便于项目的调试。产品上线设置为off,用户体验好,安全性高,该设置一直有效。
也可以在脚本中执行ini_set函数,设置dispaly_errors的值,只能在脚本生命周期内,无法修改php.ini文件时,可以采用该方式,脚本周期结束,选项恢复。
设置错误显示的级别:
设置错误报告的级别后,可以决定来显示什么级别的错误信息。
在php.ini中配置error_reporting选项,默认设置为显示所有的错误:
设置错误报告的级别后,可以决定来显示什么级别的错误信息。
E_ALL:显示所有的错误
E_NOTICE:显示通知性的错误
E_WARING:显示警告性的错误
E_ERROR:显示致命性的错误
同样也可以调用ini_set函数设置。
错误日志:
错误日志设置:
一般项目上线需要记录错误日志,用于检查系统错误,默认日志开关开启。
错误日志的默认路径
apache:
apache/logs/error.log
Nginx:
/var/log/nginx/error.log
自定义错误日志存储路径:
ini_set('error_log','路径');
只能设置一次有效,脚本生命周期结束,记录结束。
自定义错误处理处理器:
出现错误时,默认使用系统的错误处理机制来提示错误信息,可以提示什么级别的错误,错误提示字符串,发生错误的文件以及行号等。
可以自定义设置错误提示:
写一个自定义错误处理函数
my_error
有四个参数
$errCode:错误代号
$errStr:错误提示
$errFile:错误文件
$errLine:错误行号
默认不会调用,必须调用set_error_handler函数设置为系统自动调用这个函数。
先到这把,欢迎继续补充~~~,本人微信meng199898,转帖需备注