set_error_handler() - php 错误处理日志函数
set_error_handler()
(PHP 4 >= 4.0.1, PHP 5, PHP 7)
设置用户自定义的错误处理函数
说明
set_error_handler(callable $error_handler[,int $error_types= E_ALL | E_STRICT]): mixed设置用户的函数($error_handler)来处理脚本中出现的错误。
本函数可以用你自己定义的方式来处理运行中的错误,例如,在应用程序中严重错误发生时,或者在特定条件下触发了一个错误(使用trigger_error()),你需要对数据/文件做清理回收。
重要的是要记住$error_types里指定的错误类型都会绕过 PHP 标准错误处理程序,除非回调函数返回了FALSE
。error_reporting()设置将不会起到作用而你的错误处理函数继续会被调用——不过你仍然可以获取error_reporting的当前值,并做适当处理。需要特别注意的是带@ error-control operator前缀的语句发生错误时,这个值会是 0。
同时注意,在需要时你有责任使用die()。如果错误处理程序返回了,脚本将会继续执行发生错误的后一行。
以下级别的错误不能由用户定义的函数来处理:E_ERROR
、E_PARSE
、E_CORE_ERROR
、E_CORE_WARNING
、E_COMPILE_ERROR
、E_COMPILE_WARNING
,和在调用set_error_handler()函数所在文件中产生的大多数E_STRICT
。
如果错误发生在脚本执行之前(比如文件上传时),将不会调用自定义的错误处理程序因为它尚未在那时注册。
参数
$error_handler以下格式的回调(callback):可以传入NULL
重置处理程序到默认状态。除了可以传入函数名,还可以传入引用对象和对象方法名的数组。
handler(int $errno,string $errstr[,string $errfile[,int $errline[,array $errcontext]]]): bool$errno第一个参数$errno,包含了错误的级别,是一个 integer。$errstr第二个参数$errstr,包含了错误的信息,是一个 string。$errfile第三个参数是可选的,$errfile,包含了发生错误的文件名,是一个 string。$errline第四个参数是一个可选项,$errline,包含了错误发生的行号,是一个 integer。$errcontext第五个可选参数,$errcontext,是一个指向错误发生时活动符号表的 array。也就是说,$errcontext会包含错误触发处作用域内所有变量的数组。用户的错误处理程序不应该修改错误上下文(context)。Warning
PHP 7.2.0 后此参数被弃用了。极其不建议依赖它。
如果函数返回FALSE
,标准错误处理处理程序将会继续调用。
就像error_reporting的 ini 设置能够控制错误的显示一样,此参数能够用于屏蔽$error_handler的触发。如果没有该掩码,无论error_reporting是如何设置的,$error_handler都会在每个错误发生时被调用。
返回值
如果之前有定义过错误处理程序,则返回该程序名称的 string;如果是内置的错误处理程序,则返回NULL
。如果你指定了一个无效的回调函数,同样会返回NULL
。如果之前的错误处理程序是一个类的方法,此函数会返回一个带类和方法名的索引数组(indexed array)。
更新日志
版本 | 说明 |
---|---|
7.2.0 | $errcontext被废弃。使用此参数时会导致E_DEPRECATED 提醒。 |
5.5.0 | $error_handler可接收NULL 。 |
5.2.0 | 错误处理器必须返回FALSE 来显示$php_errormsg。 |
范例
用set_error_handler()和trigger_error()进行错误处理
以下示例展示了通过触发错误并以用户自定义的程序来进行内部异常的处理。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!