首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中如何在一段时间间隔后中断函数执行

在PHP中如何在一段时间间隔后中断函数执行
EN

Stack Overflow用户
提问于 2015-12-07 16:47:38
回答 3查看 1.1K关注 0票数 1

我有邮件sending.First的php脚本,我从数据库中获得所有记录,并发送每个客户的邮件。

代码语言:javascript
复制
function perform_task() {
    // Record selection and ther stuff
    $status = mail();
    // update status
}

function mail() {
    // $mail is smtp mail object
    if ($mail->send()) {
        return 1;
    } else {
        return 0;
    }
}

参见上面的邮件,我得到了所有的记录,对于每个记录,我调用perform_task ()函数来发送邮件,但是由于smtp详细服务器问题,我不能从邮件函数得到任何响应,5分钟后,我的脚本中断,给我致命的错误,并且我不能在to中更新状态。我想处理这个错误。我想在5 minute.If后中断邮件函数的执行。我从邮件函数得到任何响应,然后我想更新状态失败。

PHP中有没有超时函数?

EN

回答 3

Stack Overflow用户

发布于 2015-12-07 17:02:49

我在你的代码中看到了一些东西。

1.)例如,您应该将mail函数重命名为sendMail。当您使用与内部函数相同的名称时,这将非常令人困惑。

2.)如果你使用一个好的库,比如Swiftmailer,你会得到一个简短的回复,如果电子邮件已经发送或者你有一个错误,你可以检查这一点。普通的邮件功能也做同样的事情。

最后一件事是,当你发送大量电子邮件时,今天发送邮件是一件复杂的事情。你必须处理太多的事情,例如,你不能太快地把你的电子邮件发送给一个提供商,否则你就会被屏蔽。例如,如果你有很多电子邮件,你应该每50 - 100封电子邮件设置一个超时。因此,只需迭代超过100封电子邮件,然后等待几秒钟,然后再次发送。

否则你可能会遇到问题。您可以使用sleep在迭代之后等待。

例如,Swiftmailer具有限制发送的功能。在那里,您可以说系统应该在一次迭代中发送多少。

票数 1
EN

Stack Overflow用户

发布于 2015-12-07 17:01:44

看看这个:

代码语言:javascript
复制
$ptime=time();  //current time before sending mail
$interval=5;    //interval in seconds
if(((time() - $ptime) <= $interval){
    //execute code here...
    perform_task();
}
票数 0
EN

Stack Overflow用户

发布于 2015-12-07 17:23:44

通常,php脚本应该在2-3秒内完成它的工作--越少越好,否则就会被认为非常慢。较慢的程序应该在后台运行,例如由cron调度。你可以使用脚本,它每5分钟执行一次,工作时间为4:55。在后台执行的脚本通常没有执行时间限制,它们可以工作几个小时,但不应该。

另一种方法是-使用某种标志,这样当一个脚本副本正在运行时,另一个副本在执行时就会退出。并将脚本安排为每分钟执行一次。

此外,还应该设置邮件功能的超时,可能是30秒。如果它不能在30秒内投递电子邮件,那么它可能根本无法投递邮件。

对于大规模的电子邮件分发,最好通过API使用某种特定的服务。

另一种方法是只需5美元/月就可以获得VPS,并将其配置为适用于大规模电子邮件分发。在这种情况下,你将不得不为正确的设置支付一次费用,并为托管支付一点费用,可能需要更多的支持费用,所以你需要计算一下,哪个对你更好。

如果你想让你的电子邮件以一种正确的方式快速传递,这是最起码应该做的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34129538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档