php register_shutdown_function

时间:2023-01-12 16:17:17

register_shutdown_function — Register a function for execution on shutdown

void register_shutdown_function ( callable $callback [, mixed $parameter [, mixed $... ]] )

Registers a callback to be executed after script execution finishes or exit() is called.

Multiple calls to register_shutdown_function() can be made, and each will be called in the same order as they were registered. If you call exit() within one registered shutdown function, processing will stop completely and no other registered shutdown functions will be called.

脚本时常死掉,而且并不总是那么好看. 我们可不想给用户显示一个致命错误,又或者一个空白页(在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代码执行完成时

php register_shutdown_function的更多相关文章

  1. register&lowbar;shutdown&lowbar;function AND fastcgi&lowbar;finish&lowbar;request

    在php中又两个方法都是在请求快结束的时候执行.方法名分别是 register_shutdown_function和fastcgi_finish_request.虽然执行的时机差不多,但是功能和应用场 ...

  2. PHP 的异常处理、错误处理&colon;error&lowbar;reporting&comma;try-catch&comma;trigger&lowbar;error&comma;set&lowbar;error&lowbar;handler&comma;set&lowbar;exception&lowbar;handler&comma;register&lowbar;shutdown&lowbar;function

    一.错误.异常 等级常量表 error:不能在编译期发现的运行期错误,比如试图用 echo 输出一个未赋值的变量,这类问题往往导致程序或逻辑无法继续下去而需要中断: exception:程序执行过程中 ...

  3. 利用PHP的register&lowbar;shutdown&lowbar;function来记录PHP的输出日志,模拟析构函数

    最近在做的一个项目,由于全是通过远程HTTP请求来调用PHP的接口程序. 接收到的参数和返回的内容对开发人员来说都是未知不可见的. 虽然可以通过直接在脚本中模拟请求,但由于实际环境复杂的多,调试极其不 ...

  4. register&lowbar;shutdown&lowbar;function 函数详解

    设定错误和异常处理三函数 register_shutdown_function(array(‘Debug’,'fatalError’)); //定义PHP程序执行完成后执行的函数 set_error_ ...

  5. 利用php的register&lowbar;shutdown&lowbar;function来记录php的输出日志

    最近在做的一个项目..由于全是通过远程http请求来调用php的接口程序.. 接收到的参数和返回的内容对开发人员来说都是未知不可见的.. 虽然可以通过直接在脚本中模拟请求..但由于实际环境复杂的多.. ...

  6. php分享三十三:用php中的register&lowbar;shutdown&lowbar;function和fastcgi&lowbar;finish&lowbar;request

    已前言 在php中又两个方法都是在请求快结束的时候执行.方法名分别是 register_shutdown_function和fastcgi_finish_request.虽然执行的时机差不多,但是功能 ...

  7. PHP 错误与异常 笔记与总结(11 )register&lowbar;shutdown&lowbar;function&lpar;&rpar; 函数的使用

    通过 register_shutdown_function 方法,可以让我们设置一个当执行关闭时可以被调用的另一个函数. 也就是说,当我们的脚本执行完成或者意外死掉导致 php 执行即将关闭时,我们的 ...

  8. register&lowbar;shutdown&lowbar;function

    脚本时常死掉,而且并不总是那么好看. 我们可不想给用户显示一个致命错误,又或者一个空白页(在display_errors设为off的情况下) . PHP中有一个叫做  register_shutdow ...

  9. php的register&lowbar;shutdown&lowbar;function函数详解

    function shutdown() { $last_error = error_get_last(); if ($last_error) { error_log(print_r($last_err ...

随机推荐

  1. neutron debug

    neutron port-list neutron port-delete neutron floatingip-list neutron floatingip-delete

  2. ubuntu kylin中如何截图

    windows操作系统中,我通常使用的截图工具是QQ的“ctrl+alt+a”快捷键.但是在ubuntu中,linux qq常年不更新,我也就彻底放弃了使用了,反正ubuntu通常只是拿来开发.其实没 ...

  3. HttpWebRequest 和HttpWebResponse总结

    1. 总结 总结2 3. Code using System; using System.Collections.Generic; using System.Linq; using System.Te ...

  4. springMvc源码学习之:利用springMVC随时随地获取HttpServletRequest等对象

    一.准备工作: 在web.xml中添加 <listener> <listener-class> org.springframework.web.context.request. ...

  5. MyBatis的动态SQL操作--查询

    查询条件不确定,需要根据情况产生SQL语法,这种情况叫动态SQL,即根据不同的情况生成不同的sql语句. 模拟一个场景,在做多条件搜索的时候,

  6. MyReport报表引擎2&period;6&period;5&period;0新功能

    新的文本渲染引擎,打印旋转时保持文本高精度矢量输出,打印更清晰.  watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva29uZ195ZWU=/font/5a6 ...

  7. 初级FTP搭建

    一:了解FTP基本知识 Vsftpd 1.什么是FTP? File Transfer Protocol 基于C/S结构的文件传输协议2.使用什么协议?什么端口? TCP 21 建立命令链路 TCP 2 ...

  8. java&period;lang&period;NoSuchMethodError&colon; org&period;springframework&period;util&period;StreamUtils&period;emptyInput&lpar;&rpar;Ljava&sol;io&sol;InputStream&semi;

    今天写用spring的MockMvc测试controller的demo时出现了这个错误,条件反射的进行了百度,没有搜到匹配的答案,但给了一些解决问题的思路:首先NoSuchMethodError要不就 ...

  9. 在eclipse中使用Tomcat时出现Could not publish server &period;&period;&period;错误

    在使用eclipse加载tomcat服务器运行项目时遇到问题:    在Tomcat的安装目录下的\conf\server.xml中将<Context>标签所对应的重复名称项目删除   这 ...

  10. Flag之2019年立

    今天是2019年1月12日,这是我第一次在一个公众的平台上立flag. 至于为何想立一个flag,应该是因为自己年龄渐长,从儿时读书时代家人对自己的要求就不高,考试可以及格即可,导致了自己养成了比较安 ...