【发布时间】: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