php中register_shutdown_function 函数详解

WBOY
Freigeben: 2018-09-28 09:38:48
Original
1312 Leute haben es durchsucht

官方给出的解释为: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("测试--");
Nach dem Login kopieren

我们执行后看到效果:


也就是说在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;
Nach dem Login kopieren

运行结果:


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

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

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!