利用PHP实现定时任务,利用php 实现定时任务简单实现 代码

linux下可以借助crontab+php的方式(Crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序 )

windows 下有两种方式:

借助于vbscript脚本加载无窗口的服务

view plaincopy to clipboardprint?

1.do

2.set ws=createobject("wscript.shell")

3.ws.run"D:\php\php.exe D:\php\source\do.php",vbhide

4.wscript.sleep 5000 '毫秒

5.loop

新建文本文件,复制以上脚本,另存为后缀为*(.vbs)的文件后即可。

上面“D:\php\php.exe D:\php\source\do.php” 这种方式可以写在bat文件中,或者window计划任务中都可以执行。

php内部支持的一种利用函数“ignore_user_abort ” 来永久执行的方案。

view plaincopy to clipboardprint?

1.''<?php

2.ignore_user_abort(); // run script in background

3.set_time_limit(0); // run script forever

4.$interval=30; // do every 30 seconds...

5.do{

6.$fp = fopen('text3.txt','a');

7.fwrite($fp,'test');

8.fclose($fp);

9.sleep($interval); // wait 30 seconds

10.}while(true);

11.?>''

第三种方案,需要总是执行脚本,而且响应请求的时间是无限制的,对于定义了最大响应时间的fastcgi方式不可行,脚本还是会停止。所以需要找一种更加稳妥的方案。

**找到了**

数学是很神奇的东西。实际上定时执行,是一个时间条件执行,php中有取得时间秒数的函数time() 返回据1970年1月1日开始的秒数,而我们通常定时任务执行,可以使300秒,1000秒之类的时间间隔,意味着 。这个就好处理了,time()%timestamp==0 只要整除到了符合间隔的时间,就执行一次,恰好符合了定时的目的。

实际上最后一种简单实现,解决的是普通请求中脚本定时任务的问题,这里会受到响应时间的限制,想让这部分代码执行的更久一下可以参考ignore_user_abort和set_time_limit,如果需要大运算量的处理,就需要借助前面介绍的方式在服务器端控制定时任务了,但作为普通需求,最后一种方案是一种简单直接的实现,有一定意义!

来自:http://develop.9he.info/php/%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1%E7%AE%80%E5%8D%95%E5%AE%9E%E7%8E%B0

其它方法:

下面的这段代码,可以在当前文件夹下,生成一个test.txt,并每隔20秒,往里面写入一个时间戳,无论客户端是否关闭浏览器。

view plaincopy to clipboardprint?

1.ignore_user_abort(true);

2.set_time_limit(0);

3.

4.function write_txt(){

5.if(!file_exists(”test.txt”)){

6.$fp = fopen(”test.txt”,”wb”);

7.fclose($fp);

8.}

9.$str = file_get_contents(’test.txt’);

10.$str .= “"r"n”.date(”H:i:s”);

11.$fp = fopen(”test.txt”,”wb”);

12.fwrite($fp,$str);

13.fclose($fp);

14.}

15.

16.function do_cron(){

17.usleep(20000000);

18.write_txt();

19.}

20.

21.while(1){

22.do_cron();

23.}

关键的两个函数:

ignore_user_abort(true),这个函数的作用是,无论客户端是否关闭浏览器,下面的代码都将得到执行。

set_time_limit(0),这个函数的作用是,取消php文件的执行时间,要是没有这个函数的话,默认php的执行时间是30秒,也就是说30秒后,这个文件就say goodbay了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值