首页 > 编程 > PHP > 正文

php中register_shutdown_function函数用法详解

2020-03-22 19:52:06
字体:
来源:转载
供稿:网友
  • 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函数将会打印出一些东西.这个东西可以包装成一个类(不使用html' target='_blank'>全局变量).
    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的作用是指定当本页面所有脚本执行完成之后执行的函数。<?phpfunction 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已经当原来的页面不存在了。就没有什么相对路 径可言。 www.it165.net
    注意:register_shutdown_function 是指在执行完所有PHP语句后再调用函数,不要理解成客户端关闭流浏览器页面时调用函数。
    可以这样理解调用条件:
    1、当页面被用户强制停止时
    2、当程序代码运行超时时
    3、当PHP代码执行完成时

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表