我正在尝试实施一个“穷人的cron”来每隔10分钟运行一次我的PHP脚本(如果没有人访问该页面,直到有人这样做才会运行)
这就是我所拥有的:
$current_time = time();
if($current_time >= $last_run + (60 * 10)) {
echo 'foo';
$last_run = time();
} else {
echo 'bar';
}
我期望得到的是屏幕上的“foo”,当我刷新页面时,我想看到“bar”。如果我在10分钟后刷新页面,它应该再次“foo”一次,然后“bar”直到另外10分钟过去。
目前它一直打印出“foo”。
答案 0 :(得分:3)
执行完成后,变量不会保留其值。当PHP脚本完成时,所有内存都被清除,这意味着下次运行脚本时,PHP将不知道$last_run
是什么。您需要以某种方式存储$last_run
,可能使用文件系统或数据库。
使用文件系统,您可以:
$last_run = file_get_contents('lastrun.txt');
if (!$last_run || $current_time >= $last_run + (60 * 10)) {
echo 'foo';
file_put_contents('lastrun.txt', time());
} else {
echo 'bar';
}
答案 1 :(得分:1)
遗憾的是,这不是PHP的工作原理。当您访问Web服务器时,PHP会启动一个新进程,然后就会死掉。你需要一个永远运行的脚本,使用类似的东西:
while (true) {
// Check if we should do anything, or just keep spinning
}
然而,PHP并不是为这类任务设计的,而且这个脚本很可能迟早会因最大执行时间,内存限制或其他原因而死亡。
功能性差的男人cronjob"而是要求您检查当前时间戳并执行自上次访问之后应该执行的任何操作,然后再继续。这会"假的"让cron工作正常运转的错觉。