php计划任务之ignore_user_abort函数实现方法


Posted in PHP onJanuary 08, 2015

本文实例讲述了php计划任务之ignore_user_abort函数实现方法。分享给大家供大家参考。具体分析如下:

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

<?php 

 ignore_user_abort(true); 

 set_time_limit(0); 

 

 while(1) { 

 $fp  = fopen('time_task.txt',"a+"); 

 
$str = date("Y-m-d h:i:s")."nr"; 

 
fwrite($fp,$str); 

 
fclose($fp); 

 
sleep(5);    //半小时执行一次

 } 

?>

定义和用法

ignore_user_abort() 函数设置与客户机断开是否会终止脚本的执行,本函数返回 user-abort 设置的之前的值(一个布尔值).

语法:ignore_user_abort(setting)

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

提示和注释

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

以下是补充资料

先来个简单的例子:

<?php
//php定时计划任务
ignore_user_abort(); // 函数设置与客户机断开是否会终止脚本的执行
set_time_limit(0); // 来设置一个脚本的执行时间为无限长
$interval=30;
do{
$fp = fopen(‘text3.txt','a');
fwrite($fp,'test');
fclose($fp);
sleep($interval); // 函数延迟代码执行若干秒
}while(true);
?>

首先,运行该程序,然后关闭该页面,程序仍然运行中,test会每隔30秒的填补到text3.txt文件。
最后介绍下php手册中的相关的知识:

1.连接处理:
在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:

0 ? NORMAL(正常)

1 ? ABORTED(异常退出)

2 ? TIMEOUT(超时)

当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限时,TIMEOUT 状态的标记将被打开。

可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户 端连接中断时脚本将会退出。该处理过程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 设置中对应的”php_value ignore_user_abort”以及 ignore_user_abort() 函数来控制。如果没有告诉 PHP 忽略用户的中断,脚本将会被中断,除非通过 register_shutdown_function() 设置了关闭触发函数。通过该关闭触发函数,当远程用户点击 STOP 按钮后,脚本再次尝试输出数据时,PHP 将会检测到连接已被中断,并调用关闭触发函数。

脚本也有可能被内置的脚本计时器中断。默认的超时限制为 30 秒。这个值可以通过设置 php.ini 的 max_execution_time 或 Apache .conf 设置中对应的”php_value max_execution_time”参数或者 set_time_limit() 函数来更改。当计数器超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数也将在这时被执行。在该关闭触发函数中,可以通过调 用 connection_status() 函数来检查超时是否导致关闭触发函数被调用。如果超时导致了关闭触发函数的调用,该函数将返回 2。

注意:ABORTED 和 TIMEOUT 状态可以同时有效。这在告诉 PHP 忽略用户的退出操作时是可能的。PHP 将仍然注意用户已经中断了连接但脚本仍然在运行的情况。如果到了运行的时间限制,脚本将被退出,设置过的关闭触发函数也将被执行。在这时会发现函数 connection_status() 返回 3。

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
php注入实例
Oct 09 PHP
Php部分常见问题总结
Oct 09 PHP
第六章 php目录与文件操作
Dec 30 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
Jun 21 PHP
关于Zend Studio 配色方案插件的介绍
Jun 24 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
Sep 26 PHP
Laravel框架表单验证详解
Sep 04 PHP
html静态页面调用php文件的方法
Nov 13 PHP
ThinkPHP路由详解
Jul 27 PHP
php简单统计在线人数的方法
May 10 PHP
ThinkPHP 模板引擎使用详解
May 07 PHP
php面试中关于面向对象的相关问题
Feb 13 PHP
网站防止被刷票的一些思路与方法
Jan 08 #PHP
分享常见的几种页面静态化的方法
Jan 08 #PHP
php的ddos攻击解决方法
Jan 08 #PHP
php的sso单点登录实现方法
Jan 08 #PHP
PHP制作万年历
Jan 07 #PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 #PHP
CI框架中site_url()和base_url()的区别
Jan 07 #PHP
You might like
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
浅析JavaScript原型继承的陷阱
2013/12/03 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
使用jspdf生成pdf报表
2015/07/03 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
JS中的phototype详解
2017/02/04 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
Electron 调用命令行(cmd)
2019/09/23 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
小结Python用fork来创建子进程注意事项
2014/07/03 Python
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
使用python实现链表操作
2018/01/26 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
python IDLE添加行号显示教程
2020/04/25 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
高中毕业生自我鉴定范文
2013/09/26 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
浅谈:电影《孔子》观后感(范文)
2019/10/14 职场文书
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL