2017-10-19 104 views
0

这是我的cronjob.php文件,在mysql数据库中我有一个row['cronjob'],它的值是test1.php,这只是我的一个php文件的名称,需要在日期时间行等于或小于当前时间时执行,而cron作业运行。 我想我可以做一个while-loop然后从cronjob row得到文件的名称,然后执行它,如果日期时间等于或小于玉米作业运行的当前时间。请看下面:如何通过一个cron作业和一个循环执行多个php文件

while($row = mysqli_fetch_array($result)){ 
     $detime = strtotime($row['date']); 
     $id = $row['id']; 
     $phpfile = $row['cronjob']; 

      if($detime <= time()){ 
        include $phpfile; 
        $sql2 = "UPDATE my-table SET cronstatus = 1 WHERE id = $id "; 
        $result2 = mysqli_query($conn, $sql2); 
      } 
    } 

不过,我只要有include $phpfile;(之前的循环,并没有错误运行!通过增加包括对代码得到一个错误Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean,只有第一排将是执行时(虽然有一个错误!)while循环没有完成它的工作什么是最好的方式来执行所有的PHP文件通过使用一个cron作业,每运行x分钟基于检查日期时间对当前时间? 欣赏你是否可以写下正确的代码!

回答

0

我建议你改变一下策略,考虑下面的文件结构:

  • /作业
  • /jobs/JobInterface.php
  • /jobs/MyFirstJob.php
  • /jobs/MySecondJob.php
  • /作业/ < ..多个作业..>
  • /cron.php

每个作业文件夹包含实现在JobInterface.php发现interface的一类,在作业结束文件。该界面要求所有作业都有一个“运行”方法。

然后,您可以使用autoloading或者您只需在cron.php的顶部手动将所有文件包含在作业文件夹中,该文件仍然是您运行的文件。

在数据库的“cronjob”字段中,您将具有作业的名称(即类名称),而不是文件的名称。

$job_class_name = $row['cronjob']; 
if (false === class_exists($job_class_name)) throw new Exception("No such job"); 
$job = new $job_class_name; 
if (false === $job instance JobInterface) throw new Exception("Not a job"); 
$job->run(); // since the interface requires all jobs to have this method 
相关问题