【问题标题】:PHP if, just once every 30 min?PHP如果,每30分钟一次?
【发布时间】:2015-09-15 11:05:53
【问题描述】:

我有一个带有 IF 语句的脚本,它检查 XML 中的特定值。该文档每 30 秒刷新一次,如果在 XML 中找到该值 - 则执行命令。有什么办法可以让脚本每 15 分钟执行一次,而不是每次 XML 每 30 秒刷新一次?

$xml = 'http://www.example.com/xmlfile.xml';

if ($xml->value == '1')
{
// Exectute something if value from the XML is 1.

}
else
{
// Value not 1, do nothing.

}

【问题讨论】:

  • 您可以在$_SESSION 中存储刷新计数,并在脚本上设置一个条件,使其仅在奇数/偶数计数时运行。
  • @HarshitShrivastava Cron 作业是一个选项,但您如何做到这一点并确保脚本在值为 1 时立即检查 XML?通过 cron 作业,我可以将其设置为每 15 分钟运行一次脚本,但这无助于我们从 XML 中获取正确的值。如果我描述得足够好:)
  • @GeoffAtkins 你有什么例子吗?我是一个新手,之前没有使用过会话。如果这可以帮助我在值为 1 时每 15 分钟执行一次命令,那就太棒了!
  • 您可以将上次运行的时间写入文件并使用xml值检查时间。
  • 这是完整的例子吗? $xml 只是字符串...而$xml->value 会导致错误...

标签: php xml if-statement time limit


【解决方案1】:
$fileName = "lastrun.txt";
$time = file_get_contents($filename);
$timeBetweenRuns = 15;
if(!$time || time() > $time+60*$timeBetweenRuns){//if no file or time elapsed more then timeBetweenRuns 
   //Your code read file
   if($xml->1){
       //Your code .. Only thing if it may take more then next run, you need to add lock to not allow two process do same thing
       file_put_contents($filename, time())
   }
   else{//Your code
   }
}

类似的东西。

【讨论】:

  • 这成功了! :) 很好的解决方案!非常感谢!只是一个简单的问题,@AntonM。 ;脚本是否应该向文件写入内容?起初它没有,但过了一会儿它写了一些数字给它。当脚本将这些数字写入文件时,它返回一个白页。我在脚本中添加了一些回声,看看它是否真的有效。
  • file_put_contents($filename, time()) 写入文件执行时间。当脚本运行时,他从文件中检查时间。他在您的处理完成后写道(如果是我想的那样)。如果您的逻辑比下一次启动更有效,那么您需要做一些事情来避免它(锁定)。示例:每分钟 cron,您的任务工作 90 秒,因此第二个 cron 将读取旧值并开始工作,因此可能会发生 2 个进程会做同样的事情。
【解决方案2】:

对于此类周期性元素,您必须使用 CronJob。

0 */30 * * * * php /root/path/to/script.php

并在脚本中执行您的逻辑。

$xmlPath = 'http://www.example.com/xmlfile.xml';

$xml = new SimpleXMLElement($xmlPath);
$value = $xml->value;

if ($value === '1') {
    // Do stuff.
}

如果您没有 Cron 访问权限,则可以使用 www.setcronjob.com 之类的东西,而不是使用 PHP 脚本访问权限,而是使用 wget http://example.com/script.php 之类的东西

【讨论】:

  • 这会让脚本每 30 秒运行一次吗?如果 5 分钟的值为 1,脚本会在这 5 分钟内每 30 秒执行一次吗?我只希望它执行一次,即使例如 10 分钟的值为 1。
  • @zorensen 正如我在上面写的那样,将上次运行时间写入文件并检查上次运行的时间。
  • @zorensen 此脚本将每 30 分钟执行一次(如问题标题中所述)。无论 XML 中的值是什么,都会在小时的第 0 分钟和第 30 分钟执行。
  • @AntonM。对我来说听起来很棒!你有什么例子吗?我是新手,如果你没有注意到的话;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 2022-12-18
相关资源
最近更新 更多