php 实现定时任务简单实现

php 实现定时任务简单实现

通常情况下实现定时计划任务有以下几种方式:

  • linux下可以借助crontab+php的方式(Crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序 )
  • windows 下有两种方式:
    • 借助于vbscript脚本加载无窗口的服务
      do
      set ws=createobject("wscript.shell")
      ws.run"D:\php\php.exe D:\php\source\do.php",vbhide
      wscript.sleep 5000   '毫秒
      loop

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

    • 上面“D:\php\php.exe D:\php\source\do.php” 这种方式可以写在bat文件中,或者window计划任务中都可以执行。
  • php内部支持的一种利用函数“ignore_user_abort ” 来永久执行的方案。
    
    


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

找到了

数学是很神奇的东西。实际上定时执行,是一个时间条件执行,php中有取得时间秒数的函数time() 返回据1970年1月1日开始的秒数,而我们通常定时任务执行,可以使300秒,1000秒之类的时间间隔,意味着 。这个就好处理了,time()%timestamp==0 只要整除到了符合间隔的时间,就执行一次,恰好符合了定时的目的。这里的==0是基于脚本总是调用的情况的,为了提高频率可以暂定为小于某个数,对于大量请求的应用而言,等于零比较容易达到。

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

转自(九合开发网)

2 comments to php 实现定时任务简单实现

Leave a Reply to 宫寒

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Protected by WP Anti Spam