【发布时间】:2013-01-24 17:54:55
【问题描述】:
可能重复:
Is there a function similar to setTimeout() (JavaScript) for PHP?
有没有办法在 PHP 中做超时?类似于 Javascript 中的 setTimeout() 的东西。 我想在 5 分钟后在数据库中插入数据。
编辑:还有。 5分钟后它会做另一件事。将执行一个函数。然后,该方法不应该与数据库一起使用。挂起是不可取的
【问题讨论】:
标签: php
可能重复:
Is there a function similar to setTimeout() (JavaScript) for PHP?
有没有办法在 PHP 中做超时?类似于 Javascript 中的 setTimeout() 的东西。 我想在 5 分钟后在数据库中插入数据。
编辑:还有。 5分钟后它会做另一件事。将执行一个函数。然后,该方法不应该与数据库一起使用。挂起是不可取的
【问题讨论】:
标签: php
如果数据库还没有CURRENT_TIMESTAMP 字段,请添加一个。然后,立即插入该行,但将 CURRENT_TIMESTAMP 字段设置为 DATE_ADD(NOW(),INTERVAL 5 MINUTE)。
然后,在此表中的任何代码中包含 SELECTing,包括 WHERE ts <= NOW()(其中 ts 是您的 CURRENT_TIMESTAMP 字段的名称)
我在我的一个 Cron 脚本中使用这种技术来模拟它不间断地运行,而实际上它每 15 分钟运行一次,使用 0 到 15 分钟之间的随机间隔,并且效果非常好。
【讨论】:
CURRENT_TIMESTAMP?如何将that CURRENT_TIMESTAMP字段设置为DATE_ADD(NOW(),INTERVAL 5 MINUTE)?
WHERE ts >= NOW()我会是WHERE ts <= NOW()
<=。
您需要使用诸如 cron 作业或任务调度程序之类的东西,具体取决于您所在的位置。 PHP 不是事件驱动的。
【讨论】:
正如其他人所说,没有“干净”的方式。您最好使用托管环境提供的 cron 作业或类似调度程序的实用程序。 我强烈建议你不要使用sleep()。
另一种方法是彻底改变你的方法。为什么不立即将数据放入数据库,而是在 5 分钟后赋予它不同的“含义”?
例如您发布带有时间戳的新行。阅读时,过滤掉所有 5 分钟后插入的行。
【讨论】:
php sleep() 函数是要走的路。更多细节在this thread。在您的情况下,代码可能是:
<?
sleep(300); // Or 'sleep(5*60);' to make it more readable.
echo 'Do something!';
?>
【讨论】:
sleep() 挂起脚本
我不知道你为什么需要这个,但你可以使用
sleep(300);
了解更多http://php.net/manual/en/function.sleep.php
但我会使用更优雅的解决方案,这取决于你能做什么或不能做什么。
我会将数据存储在一个临时文件中。然后使用cron 每五分钟运行一次脚本来检查天气或是否存在数据文件。如果是,请获取文件并插入数据库。
【讨论】:
sleep(5000);? 83.3333 分钟?
sleep() 是有意义的。
您可以使用 AJAX 通过 javascript setTimeout 保存数据。
【讨论】: