首頁 >後端開發 >php教程 >php中register_shutdown_function 函数详解

php中register_shutdown_function 函数详解

WBOY
WBOY原創
2016-06-06 20:06:401343瀏覽

官方给出的解释为:Registers a callback to be executed after script execution finishes orexit() is called.

即 “注册一个回调,在脚本执行完成后或在exit() 中止的时候被调用”

下面我们看个例子:

<?php

function test()
{
	echo '创建文件';
	//此处要用绝对路径,用相对路径即无效。原因请看后面的解释
	if($handle = fopen('D:/web_root/tx.txt',"w+"))  
	{
		fwrite($handle, 'you are write after exit');
		fclose($handle);
	}
}
//函数名称无需带括号,用引号包住即可; 当本页面所有语句都执行完成或者超时执行test函数。
register_shutdown_function('test');
exit("测试--");

我们执行后看到效果:


也就是说在exit()执行完之后被调用

register_shutdown_function 执行机制是:PHP把要调用的函数调入内存。当页面所有PHP语句都执行完成时,再调用此 函数。注意,在这个时候从内存中调用,不是从PHP页面中调用,所以上面的例子不能使用相对路径,因为PHP已经当原来的页面不存在了。就没有什么相对路 径可言。
注意:register_shutdown_function是指在执行完所有PHP语句后再调用函数,不要理解成客户端关闭流浏览器页面时调用函数。

我们再来看个例子:

<?php
$clean = false;
function shutdown_func(){
    global $clean;
    if (!$clean){
        die("not a clean shutdown");
    }
    return false;
}
register_shutdown_function("shutdown_func");
//将因为致命错误而失败
$a = new FooClass(); 
$clean = true;

运行结果:


当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会 被调用.所以,我们可以使用在脚本开始处设置一个变量为false,然后在脚本末尾将之设置为true的方法,让PHP关闭回调函数检查脚本完成与否. 如果我们的变量仍旧是false,我们就知道脚本的最后一行没有执行,因此它肯定在程序执行到某处死掉了.

所以我们可以看到register_shutdown_function 调用的条件

1、当页面被用户强制停止时
2、当程序代码运行超时时
3、当PHP代码执行完成时,代码执行存在异常和错误

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn