PHP ignore_user_abort函数详细介绍和使用实例


Posted in PHP onJuly 15, 2014

ignore_user_abort 设置与客户机断开是否会终止脚本的执行。

本函数返回 user-abort 设置的之前的值(一个布尔值)。
int ignore_user_abort ([ string $value ] )

 参数setting描述:可选。如果设置为 true,则忽略与用户的断开,如果设置为 false,会导致脚本停止运行。
如果未设置该参数,会返回当前的设置。

注释:PHP 不会检测到用户是否已断开连接,直到尝试向客户机发送信息为止。简单地使用 echo 语句无法确保信息发送,参阅 flush() 函数。

例-1 一个的ignore_user_abort()的例子,配合set_time_limit()函数 和一个死循环就可以实现计划任务功能。

<?php

ignore_user_abort(true);

 

set_time_limit(0);

echo 'Testing connection handling in PHP';

while (1)

{

    if (connection_status() != CONNECTION_NORMAL) {

 

        break;

 

    }

    // Sleep for 10 seconds

    sleep(10);

}

?>

PHP内置函数研究系列第二期,采用PHP函数ignore_user_abort实现计划任务与持续进程实例,并通过一个可检测效果的实例讨论ignore_user_abort()函数的作用与用法。

ignore_user_abort() 可以实现当客户端关闭后仍然可以执行PHP代码,可保持PHP进程一直在执行,可实现所谓的计划任务功能与持续进程,只需要开启执行脚本,除非 apache等服务器重启或有脚本有输出,该PHP脚本将一直处于执行的状态,初看很实用,不过代价是一个PHP执行脚本的持续进程,开销很大,但却可以 实现很多意想不到的功 能。

其描述为设置与客户机断开是否会终止脚本的执行。

附:另一篇介绍

一,函数原型

int ignore_user_abort ( [bool setting] )

二,版本兼容
PHP 3 >= 3.0.7, PHP 4, PHP 5

三,函数基础用法与实例
1,函数基础用法

<?php

ignore_user_abort();

?>

说明:调用ignore_user_abort()函数声明即使客户机断开不终止脚本的执行。

2,结合set_time_limit()函数实现一个循环脚本执行任务

<?php

ignore_user_abort();

set_time_limit(0);

$interval=60*15;

do{

//执行的业务

}while(true);

?>

说明:每隔15分钟循环执行

3,自定义实现文件输出并跟踪ignore_user_abort()函数的执行结果

<?php

ignore_user_abort ( TRUE );

set_time_limit ( 0 );

$interval = 10;

$stop = 1;

do {

    if( $stop == 10 ) break;

    file_put_contents('liuhui.php',' Current Time: '.time().' Stop: '.$stop);

    $stop++;

    sleep ( $interval );

} while ( true );

?>

打开liuhui.php文件,文件内容如下:
Current Time: 1273735029 Stop: 9

其原理是即使客户端终止脚本,仍然每隔10秒钟执行一次,并打印出当前时间与终止点,这样就可以测试出ignore_user_abort()函数的具体效果。

通过实例发现ignore_user_abort()函数非常实用,实现计划任务,完成后续任务,持续进程等非常有效。更多说明请参与PHP手册。请关注下一期PHP内置函数研究系列。

PHP 相关文章推荐
第十四节 命名空间 [14]
Oct 09 PHP
PHP配置文件中最常用四个ini函数
Mar 19 PHP
php判断字符以及字符串的包含方法属性
Aug 30 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
修改PHP的memory_limit限制的方法分享
Feb 21 PHP
php 在windows下配置虚拟目录的方法介绍
Jun 26 PHP
PHP自带函数给数字或字符串自动补齐位数
Jul 29 PHP
PHP线程的内存回收问题
Jul 08 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
Laravel 模型关联基础教程详解
Sep 17 PHP
laravel Model 执行事务的实现
Oct 10 PHP
基于PHP实现发微博动态代码实例
Dec 11 PHP
Linux下手动编译安装PHP扩展的例子分享
Jul 15 #PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 #PHP
PHP魔术引号所带来的安全问题分析
Jul 15 #PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 #PHP
PHP文件锁定写入实例解析
Jul 14 #PHP
ThinkPHP惯例配置文件详解
Jul 14 #PHP
2014年10个最佳的PHP图像操作库
Jul 14 #PHP
You might like
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
jQuery Study Notes学习笔记 (二)
2010/08/04 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
js实现YouKu的漂亮搜索框效果
2015/08/19 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
python去除所有html标签的方法
2015/05/05 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
python通过加号运算符操作列表的方法
2015/07/28 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
彻底理解Python list切片原理
2017/10/27 Python
python实现最长公共子序列
2018/05/22 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Python新手如何理解循环加载模块
2020/05/29 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
大学生物业管理求职信
2013/10/24 职场文书
拉丁舞学习者的自我评价
2013/10/27 职场文书
前台接待的工作职责
2013/11/21 职场文书
餐饮收银员岗位职责
2014/02/07 职场文书
学校党员干部承诺书
2015/05/04 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
赞助商致辞
2015/07/30 职场文书
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis