【问题标题】:PHP Backend How can I delete MySql entry after x Seconds?PHP后端如何在x秒后删除MySql条目?
【发布时间】:2021-04-22 10:28:35
【问题描述】:

我想创建一个注册系统,让用户有 120 秒的时间通过电子邮件验证他们的注册。如果用户未能及时执行此操作,则必须自动删除为此注册所做的 MySql 条目。

编辑:Cronjob 是不可能的。 MySql 条目需要在客户端发出注册后正好 120 秒删除。 cronjob 无法做到这一点。

我已经尝试过睡眠,但我无法得到我想要的结果,就像这样

<?php
$seconds = 0;
add();
function add() {
    $seconds++;
    if($seconds < 6 ) {
        sleep(1);
        add();
    }   
    echo $seconds;
}
?>

没有像我预期的那样工作。递归函数由于某种原因创建了一个无限循环。

有没有办法在不使用睡眠的情况下请求 php 在所述 120 秒后执行函数。理想情况下,用户不应该注意到后端的计时器,它根本不应该影响他。

如何做到这一点?

【问题讨论】:

  • 为什么不为此使用 cronjob?这将比这样的阻塞代码更好地工作
  • 我想到了,但我对 php 中的 cronjobs 真的一无所知。我想也许有更简单的方法?如果不是,我会很高兴举一个使用 cronjob 的例子。
  • 那里有很多教程,为什么不阅读其中的任何一个:) 特别是如果第一个进程(使用您的代码)死亡或超时或失败,每隔一两分钟运行一个 cronjob 以清除注册尝试有效
  • 是的,我调查过了。 Cronjob 仍然不是我想要的。验证时间需要从注册发生的那一刻起 120 秒。 cronjob 无法做到这一点。
  • 您可以在用户尝试提交验证时检查它 - 如果时间已经过去,那么您的代码可以简单地拒绝接受验证信息。您不需要定时任务来自动更新数据库。 (然后,您还可以有一个“清理” cron 作业,该作业按计划运行以删除任何未及时验证的记录)。附言2分钟是相当苛刻的......这是什么原因?通常,由于许多不受您(或收件人)控制的原因,电子邮件甚至可能需要更长的时间才能送达。

标签: php


【解决方案1】:

您可以在用户尝试提交验证时检查它 - 如果时间已经过去,那么您的代码可以简单地拒绝接受验证信息。您不需要定时任务来自动更新数据库。

(然后,您还可以有一个“清理”cron 作业,该作业按计划运行以删除任何未及时验证的记录)。

【讨论】:

    猜你喜欢
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2014-05-15
    • 2010-11-21
    • 1970-01-01
    • 2019-03-21
    相关资源
    最近更新 更多