home 首页 » 精彩日志 » 日志查看

友善地"死掉" - PHP register_shutdown_function函数

原文地址:http://eirikhoem.wordpress.com/2008/03/15/dying-with-grace-phps-register_shutdown_function/

iwind 译
 2008-03-15 20:40:30 


脚本时常死掉,而且并不总是那么好看. 我们可不想给用户显示一个致命错误,又或者一个空白页(在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函数将会打印出一些东西.这个东西可以包装成一个类(不使用全局变量).更多有用的相关信息,我推荐大家查看 EZ组件库的实现方式.

收藏到网摘:

评论:共 
3
 条
said   iwind 发表于2008-03-16 12:40:33

very clever
发表评论:
大名:*
网址:   http://sitename
评论:*