【转载】PHP register_shutdown_function函数详解
来源:互联网 发布:航天开盘软件 编辑:程序博客网 时间:2024/05/26 12:01
脚本时常死掉,而且并不总是那么好看. 我们可不想给用户显示一个致命错误,又或者一个空白页(在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 程序执行完成后执行的函数。
例子:
<!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);
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>";
for($i=0;$i<1000;$i++){
echo "Echo<br/>";
}
exit;
?>
</body>
</html>
register_shutdown_function的作用是指定当本页面所有脚本执行完成之后执行的函数
<?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();
register_shutdown_function 执行机制是:PHP把要调用的函数调入内存。当页面所有PHP语句都执行完成时,再调用此 函数。注意,在这个时候从内存中调用,不是从PHP页面中调用,所以上面的例子不能使用相对路径,因为PHP已经当原来的页面不存在了。就没有什么相对路 径可言。
注意:register_shutdown_function是指在执行完所有PHP语句后再调用函数,不要理解成客户端关闭流浏览器页面时调用函数。
可以这样理解调用条件:
1、当页面被用户强制停止时
2、当程序代码运行超时时
3、当PHP代码执行完成时
<?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 程序执行完成后执行的函数。
例子:
<!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);
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>";
for($i=0;$i<1000;$i++){
echo "Echo<br/>";
}
exit;
?>
</body>
</html>
register_shutdown_function的作用是指定当本页面所有脚本执行完成之后执行的函数
<?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();
register_shutdown_function 执行机制是:PHP把要调用的函数调入内存。当页面所有PHP语句都执行完成时,再调用此 函数。注意,在这个时候从内存中调用,不是从PHP页面中调用,所以上面的例子不能使用相对路径,因为PHP已经当原来的页面不存在了。就没有什么相对路 径可言。
注意:register_shutdown_function是指在执行完所有PHP语句后再调用函数,不要理解成客户端关闭流浏览器页面时调用函数。
可以这样理解调用条件:
1、当页面被用户强制停止时
2、当程序代码运行超时时
3、当PHP代码执行完成时
阅读全文
0 0
- 【转载】PHP register_shutdown_function函数详解
- PHP register_shutdown_function函数详解
- PHP register_shutdown_function函数详解
- PHP register_shutdown_function函数详解
- PHP register_shutdown_function函数详解
- PHP register_shutdown_function函数详解
- PHP register_shutdown_function函数详解
- PHP register_shutdown_function函数详解
- PHP register_shutdown_function函数详解
- PHP register_shutdown_function函数详解
- php中register_shutdown_function 函数详解
- [转]PHP register_shutdown_function函数详解
- PHP register_shutdown_function函数使用
- PHP register_shutdown_function() 函数
- [转]register_shutdown_function函数详解
- register_shutdown_function 函数详解
- register_shutdown_function 函数详解
- 【函数】register_shutdown_function函数详解【原创】
- 数据推送---反ajax comet http扩展
- Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock
- liunx下安装mysql没有初始密码的解决方法【转】
- Linux下C++访问MySQL 【转】
- C/C++连接mysql编译的找不到mysql/mysql.h的问题
- 【转载】PHP register_shutdown_function函数详解
- makfile中.PHONY的认识【转】
- 【转载】解决ncurses中文乱码问题
- [php] 索引数组合并选择两数组相加
- 解析txt文件数据
- 如何配置XAMPP的虚拟主机[转]
- 为XAMPP添加MemCache支持【转】
- Vue--缩写
- Sysctl [摘]
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
大猫叫声驱鼠声音
鼠男大属兔三岁婚姻相配吗
大鼠尾鱼哪里钓
大耳朵鼠
大眼飞鼠怎么养
大猫叫声驱鼠 mp3
大鼠文言文
大鼠文言文阅读答案
大鼠
大齐悍卒
大齐
大齐通宝图片
大齐通宝价格
富大龙
大龙挂了
大龙挂
大龙
东北大龙
大龙挂了txt
大龙燚火锅
大龙湫
属大龙
大龙焱
大龙地产
大龙湾
富大龙杨广
凶器大龙棍
乡村大龙器
雷大龙
大龙猎母行
大龙猎母
大龙猎
大龙小龙
单挑大龙
大龙模型
大龙模型网
大龙网
大龙仪器
大龙 buff
大龙buff
大龙小学