当前位置: 首页 > 编程日记 > 正文

php函数:register_shutdown_function

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 程序执行完成后执行的函数。 
例子: 
<!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 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代码执行完成时

转载于:https://www.cnblogs.com/H-KWang/p/3474564.html

相关文章:

使用IDEA新建springboot工程

2019独角兽企业重金招聘Python工程师标准>>> 说明&#xff1a;因为习惯eclipse的workspace的结构&#xff0c;所以我提前新建了一个父工程&#xff0c;只是一个简单的maven工程&#xff0c;当做工作空间&#xff0c;下面的项目就是 module&#xff08;其实和项目一样…

【青少年编程竞赛交流】03月份微信图文索引

03月份微信图文索引 由于“组队学习”这个公众号的功能主要是组织Datawhale社群中的学习者们每个月的组队学习&#xff0c;所以&#xff0c;我另外新建了这个微信公众号“青少年编程竞赛交流”&#xff0c;在这个公众号上分享有关青少年编程方面的知识&#xff0c;带小朋友们参…

使用LaTeX排版如何方便地引用多篇参考文献(不使用插件)

本文是一篇适合排版参考文献较多的论文的教程&#xff0c;目的如题。 环境&#xff1a;TexStudio 在文献管理工具中将题录导出为BibTex 打开这个文件&#xff0c;尽管是.txt结尾&#xff0c;内部格式应当是这样的 注意红框的内容&#xff0c;一会要用到。 在TexStudio里面新…

详解亚马逊:物流为何是电商命脉

在物流环节上&#xff0c;亚马逊(AMZN)主要涉及物流中心运营&#xff0c;商品配送环节主要采取和第三方快递公司合作完成。那么&#xff0c;亚马逊物流促销活 动反映在财务收支上的结果又如何&#xff1f;根据年报数据&#xff0c;2011年亚马逊收到来自用户支付的运费总计15.5亿…

四月青少年编程组队学习(图形化四级)Task01

电子学会 软件编程&#xff08;图形化&#xff09;四级 组队学习 试题来源&#xff1a; 青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级&#xff09;【2019.12】青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级&am…

jmeter启动警告项解决方案

今天安装并且配置了jmeter压力测试软件&#xff0c;然后配置完了环境变量&#xff0c;但是在cmd命令行中输入jmeter --version命名&#xff0c;发现在会有警告信息&#xff0c;如图解决这个警告信息的方法&#xff1a;1、首先进入注册表中2、然后找到HKEY_LOCAL_MACHINESOFTWAR…

初识软件体系结构(1-4课时)

前四个课时的内容是“软件体系结构概述”。 LW老师的讲课带劲&#xff0c;逻辑性强&#xff0c;也接地气&#xff0c;节奏不快不慢&#xff0c;很nice&#xff5e; 软件架构师 这门课最对口的职业是软件架构师&#xff0c;软件架构师是工作在项目经理和程序员之间&#xff0c;既…

window.open和window.location.href的几种用法

windows.open("URL","窗口名称","窗口外观设定");<A href"javascript:window.open(webpage.asp,_self)"> 点击这里 </A><a οnclick"window.open(webpage.asp,_self);void 0" href"#"> 点击这里…

React.js绑定this的5种方法

this在javascript中已经相当灵活&#xff0c;把它放到React中给我们的选择就更加困惑了。下面一起来看看React this的5种绑定方法。 1.使用React.createClass 如果你使用的是React 15及以下的版本&#xff0c;你可能使用过React.createClass函数来创建一个组件。你在里面创建的…

四月青少年编程组队学习(图形化四级)Task03

电子学会 软件编程&#xff08;图形化&#xff09;四级 组队学习 试题来源&#xff1a; 青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级&#xff09;【2019.12】青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级&am…

对于正交频分复用的异构网络的理解

正交 来看百度百科的定义—— 物理中&#xff1a;运动的独立性&#xff0c;也可以用正交来解释。正交频分复用 来看百度百科的定义—— 将信道分成若干正交子信道&#xff0c;将高速数据信号转换成并行的低速子数据流&#xff0c;调制到在每个子信道上进行传输。正交信号可以通…

java网页抓取

网页抓取就是&#xff0c;我们想要从别人的网站上得到我们想要的&#xff0c;也算是窃取了&#xff0c;有的网站就对这个网页抓取就做了限制&#xff0c;比如百度 直接进入正题 1 //要抓取的网页地址2 String urlStr "http://**************/center";3 URL url new…

四月青少年编程组队学习(图形化四级)Task05

电子学会 软件编程&#xff08;图形化&#xff09;四级 组队学习 试题来源&#xff1a; 青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级&#xff09;【2019.12】青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级&am…

Python列表split方法

转载自&#xff1a;https://www.cnblogs.com/douzi2/p/5579651.html 1、split翻译为分裂。 split()就是将一个字符串分裂成多个字符串组成的列表。 2、split()当不带参数时以空格进行分割&#xff0c;当带参数时&#xff0c;以该参数进行分割。 a、当不带参数时 st0 song …

顶级数据库管理系统的性能比较研究(论文翻译)

本文译自 《A Comparative Study on the Performance of the Top DBMS Systems 》Youssef Bassil LACSC – Lebanese Association for Computational Sciences Registered under No. 957, 2011, Beirut, Lebanon 摘要 数据库管理系统是当今将数据组织成可以搜索和更新的集合地…

debugger 调试的一些经验

1. 如果没有firebug &#xff0c; 可以用firebug-lite.js 内嵌的调试方式。 2. console.log 不是所有浏览器都支持console.log 在IE或者没有调试窗口的浏览器中&#xff0c;console.log会undefined var db {switch:true} db.log function(){if(!this.switch) return ;if( typ…

spring boot 2.0 源码分析(二)

在上一章学习了spring boot 2.0启动的大概流程以后&#xff0c;今天我们来深挖一下SpringApplication实例变量的run函数。 先把这段run函数的代码贴出来&#xff1a; /*** Run the Spring application, creating and refreshing a new* {link ApplicationContext}.* param args…

四月青少年编程组队学习(Python一级)Task01

电子学会 软件编程&#xff08;Python&#xff09;一级 组队学习 试题来源 青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09;【2020.06】青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09;【202…

hung-yi lee_p1_机器学习是什么

文章目录1.你想找什么样的函式2.怎么告诉机器你想找什么样的函式3.机器怎么找出你想要的函式机器学习就是自动找函式1.你想找什么样的函式 Regression(回归)——想找的函式输出是一个数值 Binary Classification——想找的函式输出是Yes or No(Pos or Neg) Multi-class Classi…

excel导入SQL脚本

exec sp_configure show advanced options,1 reconfigure exec sp_configure Ad Hoc Distributed Queries,1 reconfigure SELECT * INTO tmp_asset FROM OPENROWSET(Microsoft.Jet.OLEDB.4.0, Excel 8.0;Databased:\Excel数据源\资产印章.xls, SELECT * FROM [Sheet1$]) ; 转…

Hadoop hdfs完全分布式搭建教程

本文转载自&#xff1a;https://www.cnblogs.com/ysocean/p/6965197.html 1、安装环境 ①、四台Linux CentOS6.7 系统 hostname ipaddress subnet mask geteway 1、 master 192.168.146.200 255.255…

四月青少年编程组队学习(Python一级)Task02

电子学会 软件编程&#xff08;Python&#xff09;一级 组队学习 试题来源 青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09;【2020.06】青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09;【202…

软件测试知识概述

本篇内容关于【1】缺陷(bug)的类型【2】软件测试与SQA的关系【3】软件测试的七项基本原则【4】将软件测试按照不同标准进行分类【5】软件测试过程模型 缺陷(bug)类型 缺陷可能存在于程序文档(软件) 衡量缺陷的唯一标准是是否符合用户需求 ①功能未实现 ②功能实现了但性能有差异…

Hadoop基础-网络拓扑机架感知及其实现

Hadoop基础-网络拓扑机架感知及其实现 作者&#xff1a;尹正杰 版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。 一.网络拓扑结构 在本地网络中&#xff0c;两个节点被称为“彼此近邻”是什么意思&#xff1f;在海量数据处理中&#xff0c;…

批量修改图片以及加水印

好久木有来写点什么了.. 前段时间挺忙的. 今天上来分享一个,这几天我给商城图片加水印的代码吧.因为产品编辑那边是先把图片都上传完成了,所以只能做批量修改图片来完成给所有图片加水印的效果. 类似DX、京东效果. 现在正在开发的B2C项目商城: www.oxozoom.com 也希望更多能…

计算机书集下载链接

http://nic.biti.edu.cn/china-pub/ 我在那下了一本&#xff1a;XML高级编程转载于:https://www.cnblogs.com/dyuan/archive/2004/03/12/2966.html

Microsoft PlayReady DRM

支持在 Web 浏览器中使用加密媒体扩展和 Microsoft PlayReady DRM 本文内容 简介实现方法万维网联合会 (W3C) HTML5 加密媒体扩展 (EME) 为网站引入了一项功能&#xff0c;可在不使用插件的情况下播放受数字版权管理 (DRM) 保护的内容。Windows 8.1 上的 Internet Explorer 11 …

Android Binder概述

背景知识为了更好的理解binder&#xff0c;我们要先澄清一下概念&#xff0c;因为Android 基于Linux内核&#xff0c;我们有必要了解相关知识。进程隔离进程隔离是为了保护操作系统进程之间互不干扰而设计的&#xff0c;这个技术是为了避免进程A写入进程B准备的&#xff0c;进程…

如何用Asp判断你的网站的虚拟物理路径

appath方法 < p align"center" > < font size"4" face"Arial" > < b > The Physical path to this virtual website is: < /b > < /font > < font color"#FF0000" size"6" face"Aria…