PHP register_shutdown_function函数详解
脚本时常死掉,而且并不总是那么好看. 我们可不想给用户显示一个致命错误,又或者一个空白页(在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代码执行完成时
转载->>http://blog.163.com/lgh_2002/blog/static/4401752620106161954791/
转载于:https://www.cnblogs.com/yubinbin/archive/2013/03/04/2942435.html
PHP register_shutdown_function函数详解相关推荐
- C语言网络编程:accept函数详解
文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...
- 【FFmpeg】函数详解(三)
FFmpeg函数详解 14.av_write_frame 15.av_interleaved_write_frame 16.av_write_trailer 17.avio_close 18.av_i ...
- 【FFmpeg】函数详解(二)
FFmpeg函数详解 9.av_dump_format 10.avio_open 11.avformat_write_header 12.avcodec_send_frame 13.avcodec_r ...
- 【FFmpeg】函数详解(一)
FFmpeg函数详解 一.错误码相关 1.AVERROR 2.av_strerror 3.其他错误码解释 二.编解码 1.获取编解码器 2.申请.释放上下文环境 3.打开编码器avcodec_open ...
- 【ES6】Generator函数详解
[ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...
- mysql的聚合函数综合案例_MySQL常用聚合函数详解
一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...
- python平方数迭代器_对python中的高效迭代器函数详解
python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...
- python基础知识~ 函数详解2
python~函数详解2 1 生成器函数 定义 如果函数有yield这个关键字,就是生成器函数.生成器函数() 获取的是生成器,不执行函数 须知 yield和return一样,都可以返回数 ...
- scanf函数详解与缓冲区
1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数,遇到文件结束返回EOF,出错返回0. 函数功能: sca ...
- pythonpandas函数详解_对pandas中Series的map函数详解
Series的map方法可以接受一个函数或含有映射关系的字典型对象. 使用map是一种实现元素级转换以及其他数据清理工作的便捷方式. (DataFrame中对应的是applymap()函数,当然Dat ...
最新文章
- 迁移学习:领域自适应的理论分析
- 常见问题及解决方案(前端篇)
- 一列对应右侧几行html,css查找表格第几行第几列
- oracle11g的用户名是什么,oracle11g默认用户名和密码
- python django开发新闻聚合检索推荐_Django查询以检索符合相关选项卡上聚合条件的行...
- 将数值位转换为字符位后输出
- 数据结构之红黑树插入案例详解
- 由于某些原因,请使用bejson.com的哥们先使用1.bejson.com
- ubuntu内部错误
- python爬取北京政务公开惠民地图信息
- Moebius for SQL Server集群
- 身份证前两位对照省份表
- python爬贴吧回复_Python爬虫实践,获取百度贴吧内容
- u盘数据恢复,教你轻松搞定!
- 机器学习项目实战——10决策树算法之动物分类
- matlab神经网络43个案例PDF,matlab神经网络预测模型
- KISSY基础篇乄KISSY之IO(1)
- QQ浏览器怎么同步通讯录?QQ浏览器同步通讯录的方法
- 有关/mnt/asec /mnt/secure文件夹及app2sd原理
- 一个例子彻底弄懂python中的break和continue语句(Python经典编程案例)
热门文章
- jQuery CSS 添加/删除类名
- org.jgroups.ChannelException: failed to start p...
- 关于在数据库中存储层次数据的一点看法与理解
- chrome浏览器不展示地址栏的完整路径解决
- php中的 server 2008,window_Windows Server 2008开发指南解析, Windows Server 2008开发指南中 - phpStudy...
- AndroidStudio打开的Gradle项目不识别成相应文件,gradle无响应
- linux系统MongoDB4.0安装,密码设置,常用命令,集成springmvc
- webview是什么东西_做性能优化前需要考虑什么?
- XMLHttpRequest的属性
- Hibernate组件作为Map索引(四)