脚本时常死掉,而且并不总是那么好看. 我们可不想给用户显示一个致命错误,又或者一个空白页(在display_errors设为off的情况下) .
PHP中有一个叫做 register_shutdown_function 的函数,可以让我们设置一个当执行关闭时可以被调用的另一个函数.也就是说当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会 被调用.所以,我们可以使用在脚本开始处设置一个变量为false,然后在脚本末尾将之设置为true的方法,让PHP关闭回调函数检查脚本完成与否.
如果我们的变量仍旧是false,我们就知道脚本的最后一行没有执行,因此它肯定在程序执行到某处死掉了.我准备了一个非常基本的例子,可以演示在一个致 命错误需要显示时,你应该怎么给用户一些合适的反馈.你可以通过关闭致命错误的显示(译注:可以设置display_errors和 error_reporting),让例子看起来好看些.
<?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;
?>
正如你所看到,如果关闭回调函数运行时,clean变量没有被设为true,shutdown_func函数将会打印出一些东西.这个东西可以包装成一个类(不使用全局变量).
PHP提供register_shutdown_function()这个函数,能够在脚本终止前回调注册的函数,也就是当 PHP 程序执行完成后执行的函数。
php程序员站
例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>register_shutdown_function示例</title>
</head>
<body>
<?php
$starttime=microtime(true);
www.phperz.com
function Test(){
$starttime=microtime(true);
if(!file_exists('Test.txt')){ //判断如果文件不存在!!
$Str = fopen('Test.txt',"w+");
fwrite($Str,'我是在最后写进来的.时间:$starttime');
fclose($Str);
echo "创建完成!创建时间:$starttime";
}
else { //如果存在;
echo '文件已经存在';
}
}
register_shutdown_function('Test');
echo "程序开始:".$starttime."<br>"; phperz~com
for($i=0;$i<1000;$i++){
echo "Echo<br/>";
}
exit;
?>
</body>
</html>
register_shutdown_function的作用是指定当本页面所有脚本执行完成之后执行的函数。
<?php
function aaa() {
echo '创建文件';
if($ttt = fopen('D:/web_root/tx.txt',"w+")) //此处要用绝对路径,用相对路径即无效。原因请看后面的解释
{
fwrite($ttt,'you are write after exit');
fclose($ttt);
}
}
register_shutdown_function('aaa'); // 函数名称无需带括号,用引号包住即可。 当本页面所有语句都执行完成,或者超时时aa函数。
exit();
?>
register_shutdown_function 执行机制是:PHP把要调用的函数调入内存。当页面所有PHP语句都执行完成时,再调用此 函数。注意,在这个时候从内存中调用,不是从PHP页面中调用,所以上面的例子不能使用相对路径,因为PHP已经当原来的页面不存在了。就没有什么相对路 径可言。
注意:register_shutdown_function 是指在执行完所有PHP语句后再调用函数,不要理解成客户端关闭流浏览器页面时调用函数。
可以这样理解调用条件:
1、当页面被用户强制停止时
2、当程序代码运行超时时
3、当PHP代码执行完成时
分享到:
相关推荐
设定错误和异常处理三函数 register_shutdown_function(array(‘Debug','...功能:register_shutdown_function() 函数可实现当程序执行完成后执行的函数,其功能为可实现程序执行完成的后续操作。程序在运行的时候可
本篇文章是对PHP register_shutdown_function函数进行了详细的分析介绍,需要的朋友参考下
当程序在线上运行时,如果遇到BUG,想不在前端输出错误信息,同时能及时邮件通知开发者,...register_shutdown_function 函数,当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会 被调用,
php中的异常捕获没有java的强大,有些情况下,需要知道某段php程序业务是否正常执行完,可以用register_shutdown_function函数来辅助实现,这篇文章主要给大家介绍了关于PHP中register_shutdown_function函数的基础...
主要介绍了PHP register_shutdown_function()函数的使用示例,当我们的脚本执行完成或者意外死掉导致 php 执行即将关闭时,register_shutdown_function()这个函数会被调用,需要的朋友可以参考下
主要介绍了PHP中使用register_shutdown_function函数截获fatal error示例,需要的朋友可以参考下
主要介绍了php中__destruct与register_shutdown_function执行的先后顺序问题,需要的朋友可以参考下
php ignore_user_abort与register_shutdown_function 使用方法小结。
2.shutdown how=SHUT_WR(关闭写端)可以保证对等方接收到一个EOF字符(FIN段),而不管是否有其他进程已经打开了套接字(shutdown并没采用引用计数)。 而close需要等待套接字引用计数减为0时才发送FIN段。也就是说...
局域网关机 (关机_重启_注销)wuzuren_localnet_shutdown.rar 学习学习吧
1_shutdown.exe
人小鬼大 感受Windows中Shutdown命令魅力 WINDOWS XP的关机中。Windows XP系统是通过一个名为Shutdown.exe的程序来完成关机操作的,关机的时候调用shutdown.exe。在Windows XP的运用中,如果我们能很好的利用这个...
【明智Wise系列 - 软件名称】Wise_Auto_Shutdown_v1.6.5.87【定时自动关机工具】 — Windows自动关机/重启/休眠工具 — 可以帮助实现电脑定时关机, 重启, 注销, 休眠等多项任务 — 用户除可以设定每天固定某个...