• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

phpregister_shutdown_function

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

register_shutdown_function — Register a function for execution on shutdown

void register_shutdown_function ( callable $callback [, mixed $parameter [, mixed $... ]] )

Registers a callback to be executed after script execution finishes or exit() is called.

Multiple calls to register_shutdown_function() can be made, and each will be called in the same order as they were registered. If you call exit() within one registered shutdown function, processing will stop completely and no other registered shutdown functions will be called.

脚本时常死掉,而且并不总是那么好看. 我们可不想给用户显示一个致命错误,又或者一个空白页(在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代码执行完成时

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
php连接Mysql数据表显示出表内容发布时间:2022-07-10
下一篇:
收錄PHP試題发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap