php如何实现定时任务,php定时任务方法,最佳解决方案,php自动任务处理

php如何实现定时任务,php定时任务方法,最佳解决方案,php自动任务处理

Joe PHP 2012-01-18

定时任务对于php来说一直都是很多朋友的一个难题,但却很多地方都遇到了。
比如说:
游戏开发程序中,每隔10分钟给玩家发兵一次
sns社区中每隔20秒检测一下是否有人给我发消息
自动采集程序,每隔5分钟采集一次最新内容
微博数据同步,每隔10个小时通过微博api接口同步一次用户数据
……

大概有那么几种方法:
1.Linux系统
定时直接可以用cron来执行一个php脚本 或者其他语言的脚本[你要有足够的系统权限]
执行编辑cron命令


1

crontab -e

比如每隔5分钟执行下 /root/bin目录下的test.php脚本

*/5 * * * * php /root/bin/test.php

2.windows系统
可用计划任务执行脚本,不举例

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

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

后来我又通过其他渠道获得了解决的最佳办法,而且我还亲自做了测试。
大致理念就是设定关闭浏览器程序也会停留在服务器内存中执行,并且相应时间永不过期
看程序:


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

27

28

29

30

31

32

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<5; $i++)

        {

            $flag=fwrite($fp,$i."这里是文件内容www.uacool.com\r\n");

            if(!$flag)

            {

                echo "写入文件失败";

                break;

            }

        }

    }

    fclose($fp);

    // 写文件操作结束

    $count++;

    // 设定定时任务终止条件

    if (file_exists(‘lock.txt‘))

    {

        break;

    }

}

把这个文件命名为 tast.php 放在网站根目录
如: www.uacool.com/tast.php
访问此网页。此程序会再网站根目录不断生成名为test0.txt,test1.txt,test2.txt…的文本文件
访问后可关闭浏览器,不影响程序继续执行,如想阻止程序,请在网站根目录下放一个名为lock.txt的文件。
如:www.uacool.com/lock.txt
当然重新启动服务器或者重启电脑也可以阻止程序继续运行

相关内容:
windows的schtasks定时任务:http://www.cnblogs.com/lostyue/archive/2011/10/24/2223166.html

Cron服务是SAE为开发者提供的分布式定时服务:http://sae.sina.com.cn/?m=devcenter&catId=195

时间: 2024-10-14 18:54:11

php如何实现定时任务,php定时任务方法,最佳解决方案,php自动任务处理的相关文章

Maven WEB 项目使用ProGuard进行混淆,最佳解决方案

Maven WEB 项目使用ProGuard进行混淆,最佳解决方案 近期公司的Android项目做了混淆,虽说对于保护代码并不是100%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保护做出贡献. 于是,公司写的一大堆WEB项目也想做保护.但几大问题随之而来: 公司的所有项目全部是Maven项目,网上的混淆方案不是陈旧就是无效 网上的大部分解决方案感觉像是对简单DEMO进行混淆,根本不能用于复杂的WEB项目中 网上的大部分解决方案是针对Android项目的,针对WEB的少之又少

Android中自定义ListView无法响应OnItemClickListener中的onItemClick方法问题解决方案

如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView 的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为 false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中了 我们可以通过对Item Layout的根控件设置其android:descendantFocusability="blo

excel取消自动超链接的方法:还原和自动更正取消自动超链接

默认设置下,我们在excel表格中输入网址,一般excel都会自动将我们输入的网址自动更正为超链接.当单击该网址,就会打开相应的网页. 如果我们不想要自动添加超链接,请看下面的excel取消自动超链接的方法. excel取消自动超链接方法一:Ctrl + Z 还原 当我们输入网址之后,回车键确认结束输入,此时默认情况下,会被Excel 改成超链接,接下来,我们不做任何其他操作,马上按 下快捷键Ctrl + Z 还原,这样超链接就会被恢复为文字. 如果要输入大量的网址又不想被自动改成超链接,那么就

Delphi按名字调用方法高级解决方案

Delphi按名字调用方法高级解决方案 博客分类: 编程基础 DelphiJ#ASPDOS数据结构 按名字调用方法似乎一直以来都是大家比较关注的技术,在论坛上有一个经典的答复: type    TProcedure = procedure(Test: string) of object; procedure ExecuteRoutine(Obj: TObject; Name, Param: string);  var    PMethod: TMethod;    AProcedure: TPr

jquery 1.9版本后不在支持browser 方法的解决方案

今天对jquery 进行升级,导致项目出错,原来在1.9版本之后 jquery 不支持browser 方法了.  官方建议的又不好用,所以我所jquery 原来的代码摘除来,又扩展回去. //解决jquery 1.9版本之后不支持 browser 这里进行了扩展 var a, b; $.uaMatch = function (a) { a = a.toLowerCase(); var b = /(chrome)[ \/]([\w.]+)/.exec(a) || /(webkit)[ \/]([\

开发接口文档--本接口文档是读取控制器方法上的注释自动生成的

本文档是参考网上的然后根据公司需要对代码进行了抽取和优化(主要是加了标题栏和对输出进行了格式化输出,更换呢了页面渲染方式(改为直接使用php进行渲染,原来的是使用了模板引擎),可读性较好),配置简单,读取方便,和项目耦合性较小,只需要将api_view这个文件夹放到和项目同级就可以使用,接口文档只有100多k大小 1.配置控制器 按照上图格式写接口方法注释(主是在控制器上面和方法上) 2.将接口文档放置在和项目同级 注:上面3个事项目,最下面的是接口文档 3.配置接口文档配置文件 api_vie

PHP Ajax 跨域问题最佳解决方案 【摘自菜鸟教程】

PHP Ajax 跨域问题最佳解决方案 分类 编程技术 http://www.runoob.com/w3cnote/php-ajax-cross-border.html 本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com. 如果直接使用ajax访问,会有以下错误: XMLHttpRequest cannot load http://server.runoob.co

Spring+Quartz实现定时任务的配置方法

1.Scheduler的配置 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="testTrigger"/> </list> </property> <property name=&q

quartz (二) Spring+Quartz实现定时任务的配置方法

JobDetail  设置执行的任务 :CronTrigger   触发器:设置执行的时间规则      ;  Scheduler    // 调度器,将任务与执行时间关联 本文转自:http://www.oschina.net/question/8676_9032 1.Scheduler的配置 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property nam