PHP 函数 ignore_user_abort定时执行任务的实现
本函数返回 user-abort 设置的之前的值(一个布尔值)。
int ignore_user_abort ([ string $value ] )
参数 | 描述 |
setting | 可选。如果设置为 true,则忽略与用户的断开,如果设置为 false,会导致脚本停止运行。 如果未设置该参数,会返回当前的设置。 |
注释:PHP 不会检测到用户是否已断开连接,直到尝试向客户机发送信息为止。简单地使用 echo 语句无法确保信息发送,参阅 flush() 函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 例-1 一个的ignore_user_abort()的例子,配合set_time_limit()函数 和一个死循环就可以实现计划任务功能。 <?php // Ignore user aborts and allow the script // to run forever ignore_user_abort ( true ); set_time_limit (0); echo 'Testing connection handling in PHP' ; // Run a pointless loop that sometime // hopefully will make us click away from // page or click the "Stop" button. while (1) { // Did the connection fail? if ( connection_status () != CONNECTION_NORMAL ) { break ; } // Sleep for 10 seconds sleep (10); } // If this is reached, then the 'break' // was triggered from inside the while loop // So here we can log, or perform any other tasks // we need without actually being dependent on the // browser. ?> |
PHP内置函数研究系列第二期,采用PHP函数ignore_user_abort实现计划任务与持续进程实例,并通过一个可检测效果的实例讨论ignore_user_abort()函数的作用与用法。
ignore_user_abort() 可以实现当客户端关闭后仍然可以执行PHP代码,可保持PHP进程一直在执行,可实现所谓的计划任务功能与持续进程,只需要开启执行脚本,除非 apache等服务器重启或有脚本有输出,该PHP脚本将一直处于执行的状态,初看很实用,不过代价是一个PHP执行脚本的持续进程,开销很大,但却可以 实现很多意想不到的功 能。
其描述为设置与客户机断开是否会终止脚本的执行。
一,函数原型
1 | int ignore_user_abort ( [ bool setting] ) |
二,版本兼容
PHP 3 >= 3.0.7, PHP 4, PHP 5
三,函数基础用法与实例
1,函数基础用法
1 2 3 | <?php ignore_user_abort(); ?> |
说明:调用ignore_user_abort()函数声明即使客户机断开不终止脚本的执行。
2,结合set_time_limit()函数实现一个循环脚本执行任务
1 2 3 4 5 6 7 8 | <?php ignore_user_abort(); set_time_limit(0); $interval=60*15; do { //执行的业务 } while ( true ); ?> |
说明:每隔15分钟循环执行
3,自定义实现文件输出并跟踪ignore_user_abort()函数的执行结果
1 2 3 4 5 6 7 8 9 10 11 12 | <?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内置函数研究系列。
转自:http://www.cnblogs.com/wgw8299/articles/2170092.html
相关文章:

echarts树图节点垂直间距_矿棉板吊顶标准工艺节点
材料探秘materials材料版块【矿棉板吊顶标准工艺】 材料探秘关键词:#吊杆与设备#吊顶龙骨#矿棉板#1 吊杆与设备相遇增加过桥节点图 ■ 本工艺管控要点◎ 顶面的水、电、风专业强制定位、预留、预埋必须全部完成,且电气穿线、测试完成并合格…

队列 queue
STL: 队列中pop完成的不是取出最顶端的元素,而是取出最低端的元素.也就是说最初放入的元素能够最先被取出(这种行为被叫做FIFO:First In First Out,即先进先出). queue:front 是用来访问最底端数据的函数. 1 #include <queue>2 #include <cstdio>3 uisng namespace…

Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件...
UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的。View是绘制在屏幕上能与用户进行交互的一个对象。而对于ViewGroup来说,则是一个用于存放其他View和ViewGroup对象的布局容器! Android为我们提供了View和V…

redis删除过期key的算法_面试官别再问我Redis内存满了该怎么办了
概述Redis的文章,我之前写过一篇关于「Redis的缓存的三大问题」,累计阅读也快800了,对于还只有3k左右的粉丝量,能够达到这个阅读量,已经是比较难了。这说明那篇文章写的还过得去,收到很多人的阅读肯定&…

开源监控解决方案Nagios+Cacti+PNP4Nagios+NConf+NDOUtils+Nagvis(六)ndoutils安装
前面的文章已经说过,NDOUtils必须使用2.0的版本才支持nagios4x,比较幸运的是该版本2014年就已经发布。一.安装#tar -axf ndoutils-2.0.0.tar.gz -C /usr/local/src/#cd /usr/local/src/ndoutils-2.0.0#./configure --prefix/usr/local/nagios LDFLAGS-L/…

网络安全技术分析:DDoS的攻与防
根据墨者安全相关数据研究发现,从今年年初开始,DDoS功击的数量相比去年几乎是翻倍增长,特别是游戏、金融、政企、电商、医疗行业,更是DDoS功击的重灾区,很多企业是闻“D”色变。DDos(Distributed Denial of Service),中…

pcl求平面法向量_线性代数6——平面方程与矩阵
线性方程的几何意义二元线性方程该方程是一个二元线性方程组,包含两个方程,每个方程是一条直线,两条直线的交点就是该方程有唯一解,这就是二元线性方程的几何意义。平面方程空间内不在同一直线上的三点构成一个平面,平…

php 类中的各种拦截器
1、__get( $property ) 访问未定义的属性时调用class lanjie {function __get($name){echo $name." property not found! ";} }$ob new lanjie(); echo $ob->g; 当我们调用对象$ob未定义的属性g时,调用拦截器__get()方法,输出“g property…

[Vue CLI 3] 源码之 webpack-chain
我们看一下 webpack-chain 到底做什么? Use a chaining API to generate and simplify the modification of Webpack version 2-4 configurations.熟悉 cli-plugin-babel、cli-plugin-eslint 源码的话,你会时常看到它。 如何使用呢? 1、加载它 const Co…

openstack页面自定义插件使用详解(django、ajax、post)(zTree为例)
2019独角兽企业重金招聘Python工程师标准>>> 感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正! 如有转载,请保留源作者博客信息。 Better Me的博客…

lazyload.js实现图片异步延迟加载
所谓图片异步加载,意思是不用一次把图片全部加载完,你可以叫它延迟加载,缓冲加载都行。 看看你有没有这种需求:某篇文章图片很多,如果在载入文章时就载入所有图片,无疑会延缓载入速度,让用户等…

postfilter中文什么意思_Filterpost请求中文字符编码的过滤器 --学习笔记
java代码:import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Lo…

错误:You can't specify target table 'xxx' for update in FROM clause的解决
今天在MySQL数据库删除重复数据的时候遇到了一个问题。如下脚本: DELETE FROM tempA WHERE tid IN ( SELECT MAX(tid) AS tid FROM tempA GROUP BY name,age ) 会出现报错信息: You cant specify target table tempA for update in FROM clause 大致意思…

HTTPS的七个神话(译文)
原文网址:http://blog.httpwatch.com/2011/01/28/top-7-myths-about-https/ 译文地址:http://www.ruanyifeng.com/blog/2011/02/seven_myths_about_https.html 误解七:HTTPS无法缓存 许多人以为,出于安全考虑,浏览器不…

蓝牙写入数据库_蓝牙 数据写入 简单易懂版(适合没写过蓝牙的看)
//字符串转arrbufferfunction string2buffer(str) {// 首先将字符串转为16进制let val ""for (let i 0; i < str.length; i) {if (val ) {val str.charCodeAt(i).toString(16)} else {val , str.charCodeAt(i).toString(16)}}// 将16进制转化为ArrayBufferr…

Educational Codeforces Round 9 F. Magic Matrix 最小生成树
F. Magic Matrix题目连接: http://www.codeforces.com/contest/632/problem/F Description Youre given a matrix A of size n n. Lets call the matrix with nonnegative elements magic if it is symmetric (so aij aji), aii 0 and aij ≤ max(aik, …

【SqlServer】SqlServer中的更新锁(UPDLOCK)
UPDLOCK.UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。当我们用UPDLOCK来读取记录时可以对取到的记录加上更新锁,从而加上锁的记录在其它的线程中是不能更改的只能…

Oracle CDC (Change Data Capture)更新数据捕获——概述
Change Data Capture能高效识别并捕获数据的插入、修改和删除,使更新数据供个人或应用使用。 CDC从oracle 9i开始引入,//TODO 在11G R2之后的版本里将取消支持,被Oracle GoldenGate取代。 CDC的一些概念 CDC有同步和异步两种模式,…

flutter ios启动白屏_Flutter技术架构概览
前言最近在整理各种技术架构,给自己的列了个TODO list,希望能在几个月的时间内,研究完各种前端技术架构,包括移动端技术架构。今天分享一下自己整理的flutter技术架构。完整的技术架构TODO list可以去我的github仓库查看ÿ…

SQL Relay开源的数据库池连接代理服务器
一、SQL Relay是什么? SQL Relay是一个开源的数据库池连接代理服务器 二、SQL Relay支持哪些数据库?* Oracle* MySQL* mSQL* PostgreSQL* Sybase* MS SQL Server* IBM DB2* Interbase* Sybase* SQLite* Lago* ODBC* MS Access三、安装和配置;…

关于Android开源库分享平台,(GitClub)微信小程序的开发体验
七八月份的深圳一直在下雨,总有人说雨天适合窝在家看书,对于程序开发者来说更是难得的学习机会。我们502工作室的小伙伴利用这个时间学习了一下微信小程序开发,并上线了一个GitClub小程序,目前功能有些简陋,难免有辣眼…

RSync实现文件备份同步
rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。它的特性如下:1、可以镜像保存整个目录树和文件系统。2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。3、无须特殊权限即可安装。4、优化的流程&#…
Hibernate annotation多对多配置
角色(用户组),用户多对多。 角色实体配置: private Set<TAuthUser> users;ManyToManyJoinTable(name"t_auth_user_role",joinColumns{JoinColumn(name"role_id")},inverseJoinColumns{JoinColumn(name&…

ajax中的url如何传递变量_如何创建和参数化UDT数据类型中的变量及IN,OUT 等参数?...
从数据类型的意义上说 UDT 并不被 CPU 所识别,而是在离线程序中自定义(组合)的数据类型。 S7 程序的自定义数据类型并不能装载到 S7 CPU 中。UDT 是由递增的编辑器创建并编辑或由源文件的编译而生成。 当在块调用中进行变量传递时是不能将 UDT 作为内存地址区域来传…

[雪峰磁针石博客]kotlin书籍汇总
2019独角兽企业重金招聘Python工程师标准>>> 下载地址 Learning Kotlin by Building Android Applications - 2018 初级 Develop amazing applications that will help you understand and explore the fundamentals of Kotlin while covering 3 various types of p…

web集群时session同步的3种方法
web集群时session同步的3种方法在做了web集群后,你肯定会首先考虑session同步问题,因为通过负载均衡后,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,一个登录用户,一会是登录状…

属于python文件的操作有_Python的文件操作
1、初始文件操作1、使用python读写文件使用open()函数获取文件句柄,就可以操作文件了,根据打开方式不同能执行的操作也不同。打开方式有:r、w、a、r、w、a、rb、wb、ab、rb、wb、ab,默认用的是r模式2、只读操作(r、rb)2.1、只读模…

[iOS]开发者证书和描述文件的作用
先说下证书吧。 然后是描述文件 转载于:https://www.cnblogs.com/wangqi1221/p/5240273.html

单元格编辑后级联汇总刷新
单元格编辑 级联刷新 PDERPDB db new PDERPDB(); int conid 0; int pid 0; string sql ""; string sqlC ""; if (int.TryParse(Pid, out pid)) { sql string.Format(" UPDATE JL_Project set PCMoney{0} where Pid{1};", pcmoney, Pid); }…

HTTP 协议的通用头域via 的意义以及作用
列出从客户端到 OCS 或者相反方向的响应经过了哪些代理服务器,他们用 什么协议(和版本)发送的请求。 当客户端请求到达第一个代理服务器时,该服务器会在自己发出的请求里面 添…