注册 登录
纳速健身 返回首页

awagink的个人空间 https://www.nasue.com/?1 [收藏] [复制] [RSS]

日志

用PHP实现定时器功能gnore_user_abort()函数配合set_time_limit()函数和一个死循环 ...

已有 119 次阅读2013-11-3 12:37 |个人分类:php| 定时器, 而且, 网上, 项目, 资料

  以前只知道用JS能实现定时器功能,而且很方便,但今天做项目过程中要实现个功能模块,做到其中某部分时,心想要是可以通过PHP来实现个定时器功能 就好了,于是在网上找了找,发现用gnore_user_abort()函数配合set_time_limit()函数 和一个死循环就可以实现类似功能。虽然项目最终未使用该功能,但觉得潜在的使用价值还是很高的,因此后来又参考网上的一些资料,整理如下:

1、 范例代码:

<?php

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

set_time_limit(0); //设置脚本超时时间,为0时不受时间限制

 

ob_end_clean();//清空缓存

ob_start();//开始缓冲数据

while(1){

    echo str_repeat(" ",1024);//写满IE有默认的1k buffer

    ob_flush();//将缓存中的数据压入队列

    flush();//输出缓存队列中的数据

    echo "now time is ".date('h:i:s') . "<br>";//打印数据,其实是先将数据存入了缓存中

    usleep(1000000);//延迟一秒(暂停一秒)

}

?>

 

该段程序实现的功能是每隔一秒钟输出一次包含当前时间的字符串,运行结果如图a:

用PHP实现定时器功能 - 易龙天网官方博客 - 易龙天官方博客

图a

 

2、  说明:

    大家应该注意到了,范例中有四句标红的代码,这是四句缓存相关的语句。通过测试,如果将该四句缓存语句去掉,则输出结果为不连贯输出,如图b所示,输出结 果分块输出,即每次一次性输出八条(该数量与echo str_repeat(" ",1024);设置的字节大小相关),而非图a中的每次输出一条的连贯性输出。

 

用PHP实现定时器功能 - 易龙天网官方博客 - 易龙天官方博客

图b

    由测试可知,如果要求实现连续、均匀的输出效果(如输出时间),则应设置缓存,即使用图a对应的方法;如果对输出显示的连续性要求不高,或者时间间隔比较大(如定期自动备份,定时加密控制等),则使用图b对应的方法即可。

    为方便理解,提供相关函数作用说明如下:

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

②set_time_limit(int seconds)设置允许脚本运行的时间,单位为秒。参数值为0时不受限制。

③ob_end_clean():清除服务端缓存的数据

④ob_start():开启一个缓存(可嵌套)

       ⑤ob_flush():将缓存中的数据压入队列

⑥flush():输出缓存队列中的数据

⑦usleep(int m-seconds):以指定的微秒数延缓程序的执行。

 

注:

flush()和ob_flush()的正确顺序应是,先ob_flush()再flush(),不可弄混。

usleep()函数可替换成sleep()函数,不同之处在于sleep()的参数是秒。

评论 (0 个评论)
纳速健身网成立于2006年8月,是国内优秀健身运动网站,现拥浏览人数超30万。网站是集养生、武术、太极拳和健身气功等多种健身项目于一体的多功能交流平台。平台提供大量优质的教学视频、伴奏音乐(太极拳晨练音乐,广场舞音乐,健身气功音乐)、图文教程、运动科普和经验分享,为健身爱好者提供完善的运动指导平台。
  • 纳速QQ群乙:151815303
  • 纳速QQ群丙:79104490
  • 微信交流群:微信好友搜索【nasuwang】加小纳微信进群交流健身知识,备注【纳速】
  •                     或者扫描页面底部右侧二维码添加小纳微信>>>
  • 微信公众号

  • 微信群客服交流

  • Copyright © 2006-2021, 纳速健身网. | | 辽ICP备13002388号-1 辽公安网备21050202000005号公安网备号 纳速武术-乙 QQ