【问题标题】:How can I do a timeout in PHP? [duplicate]如何在 PHP 中进行超时? [复制]
【发布时间】:2013-01-24 17:54:55
【问题描述】:

可能重复:
Is there a function similar to setTimeout() (JavaScript) for PHP?

有没有办法在 PHP 中做超时?类似于 Javascript 中的 setTimeout() 的东西。 我想在 5 分钟后在数据库中插入数据。

编辑:还有。 5分钟后它会做另一件事。将执行一个函数。然后,该方法不应该与数据库一起使用。挂起是不可取的

【问题讨论】:

标签: php


【解决方案1】:

如果数据库还没有CURRENT_TIMESTAMP 字段,请添加一个。然后,立即插入该行,但将 CURRENT_TIMESTAMP 字段设置为 DATE_ADD(NOW(),INTERVAL 5 MINUTE)

然后,在此表中的任何代码中包含 SELECTing,包括 WHERE ts <= NOW()(其中 ts 是您的 CURRENT_TIMESTAMP 字段的名称)

我在我的一个 Cron 脚本中使用这种技术来模拟它不间断地运行,而实际上它每 15 分钟运行一次,使用 0 到 15 分钟之间的随机间隔,并且效果非常好。

【讨论】:

  • 这对我来说似乎是最好的方法。
  • 它会在 5 分钟后做另一件事。将执行一个函数。那么,该方法不应该与数据库有关。
  • @Kolink。你能给我举个例子吗?如何添加CURRENT_TIMESTAMP?如何将that CURRENT_TIMESTAMP字段设置为DATE_ADD(NOW(),INTERVAL 5 MINUTE)
  • 好的。我明白了。但是当你说:WHERE ts >= NOW()我会是WHERE ts <= NOW()
  • 啊,你是对的。对不起,我糊涂了。你想要的确实是<=
【解决方案2】:

您需要使用诸如 cron 作业或任务调度程序之类的东西,具体取决于您所在的位置。 PHP 不是事件驱动的。

【讨论】:

    【解决方案3】:

    正如其他人所说,没有“干净”的方式。您最好使用托管环境提供的 cron 作业或类似调度程序的实用程序。 我强烈建议你不要使用sleep()

    另一种方法是彻底改变你的方法。为什么不立即将数据放入数据库,而是在 5 分钟后赋予它不同的“含义”?
    例如您发布带有时间戳的新行。阅读时,过滤掉所有 5 分钟后插入的行。

    【讨论】:

    • 它挂起脚本,该脚本仍在运行,但没有响应。 HTTP 客户端的糟糕时期 :)
    • 它会在 5 分钟后做另一件事。将执行一个函数。然后,该方法不应该与数据库一起使用。有什么想法吗?
    【解决方案4】:

    php sleep() 函数是要走的路。更多细节在this thread。在您的情况下,代码可能是:

    <?
    
    sleep(300); // Or 'sleep(5*60);' to make it more readable.
    echo 'Do something!';
    
    ?>
    

    【讨论】:

    • sleep() 挂起脚本
    • 原始发帖人的帖子中没有任何内容表明挂起是不可取的。
    • 你是对的。我会编辑它
    【解决方案5】:

    我不知道你为什么需要这个,但你可以使用

    sleep(300);
    

    了解更多http://php.net/manual/en/function.sleep.php

    但我会使用更优雅的解决方案,这取决于你能做什么或不能做什么。

    我会将数据存储在一个临时文件中。然后使用cron 每五分钟运行一次脚本来检查天气或是否存在数据文件。如果是,请获取文件并插入数据库。

    【讨论】:

    • sleep(5000);? 83.3333 分钟?
    • 你是对的,晚了 :D
    • Sleep 会挂起脚本。这不仅不优雅,而且令人无法接受。
    • 是的,我知道,我按照他的要求回答了,因此为什么要在下面提供更优雅的解决方案。
    • @gd1 在不了解全部细节的情况下,您真的不能说解决方案不优雅。正如原始海报所说,他们只是想延迟脚本将数据插入数据库。谁知道什么或为什么?考虑到原始海报给出的参数,sleep() 是有意义的。
    【解决方案6】:

    您可以使用 AJAX 通过 javascript setTimeout 保存数据。

    【讨论】:

    • 请发表投反对票的原因
    • 我没有投反对票,但我可能应该投反对票,因为这个答案与问题无关。
    • @Sandy,你是在推荐一个 PHP 新手创建一个 JavaScript/PHP 组合的 web-service 来解决一个纯 PHP 问题?
    • @JakeGould:我试图帮助某人,但我不知道那个人是新手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2012-10-18
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多