今天发现php中,如果要记录fatal error的时候,可以实用一个不错的函数,
叫register_shutdown_function,小结如下:
register_shutdown_function可以让我们设置一个当执行关闭时可以被调用的另一个函数.也就是说当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会被调用.所以,我们可以使用在脚本开始处设置一个变量为false,然后在脚本末尾将之设置为true的方法,让PHP关闭回调函数检查脚本完成与否. 如果我们的变量仍旧是false,我们就知道脚本的最后一行没有执行,因此它肯定在程序执行到某处死掉了;
例子如下:
?php
$clean = false;
function shutdown_func(){
global $clean;
if (!$clean){
die("not a clean shutdown");
}
return false;
}
register_shutdown_function("shutdown_func");
$a = 1;
$a = new FooClass(); // 将因为致命错误而失败
$clean = true;
?>
再来一个记录fatal error的例子
function catch_fatal_error()
{
$last_error = error_get_last();
// 检查是否属于fatal_error
if(isset($last_error['type']) &&$last_error['type']==E_ERROR)
{
//相关的处理
}
}
register_shutdown_function('catch_fatal_error');
注意的是;
1,register_shutdown_function()函数可重复调用,但执行的顺序与注册的顺序相同
2,如果在调用register_shutdown_function()函数之前有exit()函数调用,register_shutdown_function()函数将不能执行
3,PHP4后支持注册函数参数传递
4,在某些服务端,如Apache,当前目录在register_shutdown_function()函数中能够改变
5,register_shutdown_function()函数执行在headers发送之后
分享到:
相关推荐
主要介绍了PHP中使用register_shutdown_function函数截获fatal error示例,需要的朋友可以参考下
本篇文章是对PHP register_shutdown_function函数进行了详细的分析介绍,需要的朋友参考下
当程序在线上运行时,如果遇到BUG,想不在前端输出错误信息,同时能及时邮件通知开发者,register_shutdown_function函数就可以派上用场了。 注册一个会在脚本执行完成或者 exit() 后被调用的函数。 可以多次调用 ...
register_shutdown_function(array(‘Debug','fatalError')); //定义PHP程序执行完成后执行的函数 set_error_handler(array(‘Debug','appError')); // 设置一个用户定义的错误处理函数 set_exception_handler(array...
最近在看《PHP核心技术与最佳实践》,里面有使用到一个函数,register_shutdown_function,由于之前没有用过该函数,就去查了一下资料,就觉得是个很实用的函数,所以这里写一下这个函数的用法。下面话不多说了,来...
主要介绍了PHP register_shutdown_function()函数的使用示例,当我们的脚本执行完成或者意外死掉导致 php 执行即将关闭时,register_shutdown_function()这个函数会被调用,需要的朋友可以参考下
主要介绍了php中__destruct与register_shutdown_function执行的先后顺序问题,需要的朋友可以参考下
php ignore_user_abort与register_shutdown_function 使用方法小结。
2.shutdown how=SHUT_WR(关闭写端)可以保证对等方接收到一个EOF字符(FIN段),而不管是否有其他进程已经打开了套接字(shutdown并没采用引用计数)。 而close需要等待套接字引用计数减为0时才发送FIN段。也就是说...
Fatal error 一般是不需要捕获的, 但是在一个复杂的程序中, 如果...register_shutdown_function 能解决set_error_handler的不足. 通过此函数注册好程序结束回调函数, 就可以捕获平时捕获不到的错误了. 再通过 error_g
局域网关机 (关机_重启_注销)wuzuren_localnet_shutdown.rar 学习学习吧
1_shutdown.exe