Home  >  Q&A  >  body text

thinkphp - 如何实现php定时执行任务,且时间是可配置的

小菜需要做个php的定时执行任务的需求。查到的三种方法,1是Windows计划任务,2,是linux的shell,3,是php的sleep方法。可想了想都不太好通过从数据库中获取自定义的时间间隔来定时间隔执行代码。求教

PHP中文网PHP中文网2750 days ago407

reply all(6)I'll reply

  • ringa_lee

    ringa_lee2017-04-10 15:36:34

    crontab

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-10 15:36:34

    写一个PHP文件 ,写一个shell脚本,设置crontab定时执行脚本,shell脚本里执行php文件

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-10 15:36:34

    有一种思路:只写一个 crontab 任务,每分钟运行一次脚本 cron.php

    然后你所有的逻辑都写在 cron.php 中,在 cron.php 中你判断是应该执行某个任务,或者是直接退出。

    http://laravel-china.org/docs/5.0/artisan#scheduling-artisan-commands

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 15:36:34

    把需要执行的时间扔redis等队列里,然后php while一直读取队列,到时间执行队列,没有到时间继续扔进队列。

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-10 15:36:34

    结合起来用啊。
    回答在linux下
    使用crontab执行定时任务,定时执行某个PHP文件,文件的内容可以根据时间来执行。
    比如:

    punlic function doAction(){
        $actionTime = 'select....'//从数据库取出时间
        if($actionTime>time()){//判断当前时间和指定时间执行操作
            ...
        }else{
            ....
        }
    }
    

    还有细节可以优化,比如缓存操作结果,减少数据库查询次数,减少开销

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:36:34

    你当是js呢?有触发器?都是通过系统的定时任务的要不然你就写个死循环吧,让这个程序无时无刻不在循环,通过判断时间戳执行,你的机器会被拖垮的,骚年,还是用linux的定时任务吧,网站开发本来就是一个综合应用,单独php是不可能完成所有事情的,web开发人员必须拓展js及linux知识

    reply
    0
  • Cancelreply