【问题标题】:PHP - Wait 2 hours to execute queryPHP - 等待 2 小时执行查询
【发布时间】:2013-06-19 14:08:48
【问题描述】:

我正在制作我的恢复密码系统,我需要 PHP 等待 2 小时,然后更新数据库表中的特定行,我该怎么做?

【问题讨论】:

  • 2小时后是否需要过期记录?
  • 我需要删除该行。
  • 在检查脚本中的行之前,请在 2 小时内删除所有行。我会避免使用会增加额外故障点的 cron

标签: php mysql date time wait


【解决方案1】:

将开始时间存储在用户的行上,然后有一个每 5 分钟左右运行一次的 cron 作业并查询需要更新的作业。

或者 - 当您需要访问本应在 2 小时前更新的数据时,检查该时间并查看是否超过 2 小时,进行更新,然后获取数据。

【讨论】:

  • 谢谢,有没有更快的方法?
  • 说真的,以上是最简单和最健壮的方法。有一个每周运行一次并清理数据库的脚本,但通常只检查有人尝试访问该行的日期。您将为自己节省大量服务器资源。
  • 在高流量网站上,您可以期望人们一直尝试恢复他们的密码,因此您可以使用这些恢复请求来删除旧的“过期”行,而无需使用 cron。开销应该是最小的,没有人会注意到它。简单而有效。
【解决方案2】:

如果您在专用服务器上,您可以每 10 分钟午餐一次 CRON,这会删除超过 2 小时的表条目。 Documentation of Cronjobs on Wikipedia

如果你不在专用服务器上,我想你的服务商可以给你一个好办法。

【讨论】:

  • 这允许最多两小时十分钟的恢复时间,而不是两小时
【解决方案3】:

您不会让 PHP 等待。您将过期时间戳添加到数据库中的恢复信息中,然后在(如果?)用户实际通过恢复系统时检查该时间戳,例如

SELECT ...
WHERE (expirytimestamp >= NOW() - INTERVAL 2 HOUR)

如果用户在 2 小时限制内到达,此查询将返回相关记录,他们可以继续。如果他们超过了 2 小时的限制,恢复选项将过期,您将他们转移到“获取另一封重置电子邮件”路径。

如果您不希望您的数据库中充斥着废弃的恢复尝试,那么您可以使用标准 CRON 作业进入并删除过期的记录。

【讨论】:

    【解决方案4】:

    编程是简单意味着效率的事情之一。通过尝试找到定时删除行的方法,您正在添加另一个需要编码的作业,以及另一个故障点。

    实现两小时重置限制的最佳方法是向表中添加时间戳行(PHP 中的time())。然后,当您从恢复脚本中的表中读取行时,

    if ($time < time() - 2 * 60 * 60) {
        // Delete row
    } else {
        // Perform recovery
    

    这假定$time 是存储的时间戳,并且您具有删除和恢复的功能。顺便说一句,时间戳以秒为单位,因此$time &lt; time() - 2 * 60 * 60 检查存储的时间戳是否比当前时间戳小两小时(以秒为单位)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-27
      • 2015-07-09
      • 2018-11-22
      • 1970-01-01
      • 2012-05-03
      • 2021-08-15
      • 1970-01-01
      • 2021-08-24
      相关资源
      最近更新 更多