PHP register_shutdown_function
2014-04-30 17:53
375 查看
脚本时常死掉,而且并不总是那么好看. 我们可不想给用户显示一个致命错误,又或者一个空白页(在display_errors设为off的情况下) . PHP中有一个叫做 register_shutdown_function 的函数,可以让我们设置一个当执行关闭时可以被调用的另一个函数.也就是说当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会
被调用.所以,我们可以使用在脚本开始处设置一个变量为false,然后在脚本末尾将之设置为true的方法,让PHP关闭回调函数检查脚本完成与否. 如果我们的变量仍旧是false,我们就知道脚本的最后一行没有执行,因此它肯定在程序执行到某处死掉了.我准备了一个非常基本的例子,可以演示在一个致 命错误需要显示时,你应该怎么给用户一些合适的反馈.你可以通过关闭致命错误的显示(译注:可以设置display_errors和 error_reporting),让例子看起来好看些.
正如你所看到,如果关闭回调函数运行时,clean变量没有被设为true,shutdown_func函数将会打印出一些东西.这个东西可以包装成一个类(不使用全局变量).
PHP提供register_shutdown_function()这个函数,能够在脚本终止前回调注册的函数,也就是当 PHP 程序执行完成后执行的函数。
例子:
register_shutdown_function的作用是指定当本页面所有脚本执行完成之后执行的函数
register_shutdown_function 执行机制是:PHP把要调用的函数调入内存。当页面所有PHP语句都执行完成时,再调用此 函数。注意,在这个时候从内存中调用,不是从PHP页面中调用,所以上面的例子不能使用相对路径,因为PHP已经当原来的页面不存在了。就没有什么相对路
径可言。
注意:register_shutdown_function是指在执行完所有PHP语句后再调用函数,不要理解成客户端关闭流浏览器页面时调用函数。
可以这样理解调用条件:
1、当页面被用户强制停止时
2、当程序代码运行超时时
3、当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; ?> |
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> |
<?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语句后再调用函数,不要理解成客户端关闭流浏览器页面时调用函数。
可以这样理解调用条件:
1、当页面被用户强制停止时
2、当程序代码运行超时时
3、当PHP代码执行完成时
相关文章推荐
- PHP register_shutdown_function()函数的使用示例
- PHP register_shutdown_function()函数的使用示例
- 如何使用register_shutdown_function()捕获PHP致命错误?
- 使用register_shutdown_function实现php项目脚本执行失败的实时报警
- php分享三十三:用php中的register_shutdown_function和fastcgi_finish_request
- php中__destruct与register_shutdown_function执行的先后顺序问题
- PHP错误处理函数register_shutdown_function使用示例
- PHP 的异常处理、错误处理:error_reporting,try-catch,trigger_error,set_error_handler,set_exception_handler,register_shutdown_function
- 妙用php中的register_shutdown_function和fastcgi_finish_request
- php ignore_user_abort与register_shutdown_function 使用方法
- 关于php的 register_shutdown_function 和 error_get_last函数
- PHP - register_shutdown_function()函数
- php中__destruct与register_shutdown_function执行的先后顺序问题
- php中register_shutdown_function 函数详解
- PHP register_shutdown_function()函数的使用示例
- PHP错误处理函数register_shutdown_function
- PHP中非期望致命错误的另一种处理方式:register_shutdown_function()
- 利用PHP的register_shutdown_function来记录PHP的输出日志,模拟析构函数
- 利用php的register_shutdown_function来记录php的输出日志
- 利用php的register_shutdown_function来记录php的输出日志