定时任务对于php来说一直都是很多朋友的一个难题

优采云 发布时间: 2021-06-13 18:02

  定时任务对于php来说一直都是很多朋友的一个难题

  定时任务一直是很多PHP朋友的问题,但是在很多地方都遇到过。例如:在游戏开发程序中,每10分钟向玩家派兵一次。在sns社区,每20秒检查一次是否有人​​自动给我发消息采集procedure,采集每5分钟一次......

  

<p style="color:rgb(51,51,51);font-family:'Lucida Grande', 'Segoe UI', 'Bitstream Vera Sans', Tahoma, Verdana, Arial, sans-serif;font-size:13px;line-height:20px;">

定时任务对于php来说一直都是很多朋友的一个难题,但却很多地方都遇到了。<br />

比如说:<br />

游戏开发程序中,每隔10分钟给玩家发兵一次<br />

sns社区中每隔20秒检测一下是否有人给我发消息<br />

自动采集程序,每隔5分钟采集一次最新内容<br />

微博数据同步,每隔10个小时通过微博api接口同步一次用户数据<br />

……

  

由于php属于解释型弱语言,所以做定时任务的时候不会像java那样容易,在java中直接给个进程就可以让系统执行定时任务,但是在php中没那么简单 设置都没有多线程的概念。

  

我第一次接触定时任务的时候是一个做php的朋友问我怎么实现定时发兵,我当时给出的答案是写一个包含文件,每次都执行的时候都调用这个文件检查是否有任务,但试想 如果没人触发怎么办,显然答案并不完美。

  

后来我又通过其他渠道获得了解决的最佳办法,而且我还亲自做了测试。<br />

大致理念就是设定关闭浏览器程序也会停留在服务器内存中执行,并且相应时间永不过期<br />

看程序:

ignore_user_abort(TRUE);// 设定关闭浏览器也执行程序

set_time_limit(0); // 设定响应时间不限制,默认为30秒

$count= 0;

while(TRUE)

{

sleep(5); // 每5秒钟执行一次

// 写文件操作开始

$fp= fopen("test".$count.".txt","w");

if($fp)

{

for($i=0;$i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线