### 一、官方说明 register_shutdown_function — 注册一个会在php中止时执行的函数 说明 void register_shutdown_function ( callable $callback [, mixed $parameter [, mixed $... ]] ) 注册一个 callback ,它会在脚本执行完成或者 exit() 后被调用。 可以多次调用 register_shutdown_function() ,这些被注册的回调会按照他们注册时的顺序被依次调用。 如果你在注册的方法内部调用 exit(), 那么所有处理会被中止,并且其他注册的中止回调也不会再被调用。 参数 callback 待注册的中止回调,中止回调是作为请求的一部分被执行的,因此可以在它们中进行输出或者读取输出缓冲区。 parameter 可以通过传入额外的参数来将参数传给中止函数 ### 二、函数解析 此函数可以:当执行关闭时可以被调用的一个函数,当脚本执行完成或意外出错死掉导致执行即将关闭时,这个函数就会被调用。 根据这一点,可以使用在脚本开始处设置一个变量为false,然后在脚本末尾处使用此函数将之设置为true,这样如果在脚本结束后,变量依然是false,就可以知道中途出现了变故,故排查解决之。 示例 $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; ### 三、解析 register_shutdown_function的执行机制是:PHP把要调用的函数调入内存,当页面所有PHP语句都执行完成时,再调用此函数。注意,在这个时候从内存中调用,不是从PHP页面中调用,所以上面的例子不能使用相对路径,因为PHP已经当原来的页面不存在了。就没有什么相对路径可言。 注意:register_shutdown_function 是指在执行完所有PHP语句后再调用函数,不要理解成客户端关闭流浏览器页面时调用函数。 可以这样理解调用条件: 1. 当页面被用户强制停止时 2. 当程序代码运行超时时 3. 当PHP代码执行完成时,代码执行存在异常和错误、警告