PHP register_shutdown_function函数的深入解析

2015-01-24信息快讯网

本篇文章是对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函数将会打印出一些东西.这个东西可以包装成一个类(不使用全局变量).
PHP提供register_shutdown_function()这个函数,能够在脚本终止前回调注册的函数,也就是当 PHP 程序执行完成后执行的函数。
register_shutdown_function 执行机制是:PHP把要调用的函数调入内存。当页面所有PHP语句都执行完成时,再调用此 函数。注意,在这个时候从内存中调用,不是从PHP页面中调用,所以上面的例子不能使用相对路径,因为PHP已经当原来的页面不存在了。就没有什么相对路 径可言。
注意:register_shutdown_function 是指在执行完所有PHP语句后再调用函数,不要理解成客户端关闭流浏览器页面时调用函数。
可以这样理解调用条件:
1、当页面被用户强制停止时
2、当程序代码运行超时时
3、当PHP代码执行完成时,代码执行存在异常和错误、警告
php中__destruct与register_shutdown_function执行的先后顺序问题
PHP中spl_autoload_register函数的用法总结
php ZipArchive压缩函数详解实例
php foreach循环中使用引用的问题
php二维数组用键名分组相加实例函数
php 中文字符串首字母的获取函数分享
php Session存储到Redis的方法
在PHP中使用redis
php preg_replace替换实例讲解
Php header()函数语法及使用代码
单点登录 Ucenter示例分析
php header功能的使用
web server使用php生成web页面的三种方法总结
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
实测在class的function中include的文件中非php的global全局环境
解析func_num_args与func_get_args函数的使用
Function eregi is deprecated (解决方法)
解析php中call_user_func_array的作用
PHP Cookie的使用教程详解
深入PHP与浏览器缓存的分析
解析CI即CodeIgniter框架在Nginx下的重写规则
深入php函数file_get_contents超时处理的方法详解
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
php中用加号与用array_merge合并数组的区别深入分析
PHP Error与Logging函数的深入理解
php的POSIX 函数以及进程测试的深入分析
spl_autoload_register与autoload的区别详解
php 深入理解strtotime函数的使用详解
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
PHP+jQuery实现自动补全功能源码
基于wordpress主题制作的具体实现步骤
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
Zend的Registry机制的使用说明
php学习之function的用法
一些需要禁用的PHP危险函数(disable_functions)
PHP中call_user_func_array()函数的用法演示
php ignore_user_abort与register_shutdown_function 使用方法
©2014-2024 dbsqp.com