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

PHP中如何在一段时间间隔后中断函数执行,php,Php,我有用于邮件发送的php脚本。首先,我从Db获取所有记录,然后发送每个客户的邮件 function perform_task() { // Record selection and ther stuff $status = mail(); // update status } function mail() { // $mail is smtp mail object if ($mail->send()) { return 1;

我有用于邮件发送的php脚本。首先,我从Db获取所有记录,然后发送每个客户的邮件

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函数。首先,我获取所有记录,对于每个记录,我调用mail()函数发送邮件,但由于smtp详细信息服务器问题,我无法从mail函数获得任何响应,5分钟后,我的脚本中断,并给出致命错误,我无法更新数据库中的状态。我想处理此错误。我想在5分钟后中断邮件函数的执行。如果我从邮件函数得到任何响应,我想更新状态失败

PHP中是否有超时功能?

请检查以下内容:

$ptime=time();  //current time before sending mail
$interval=5;    //interval in seconds
if(((time() - $ptime) <= $interval){
    //execute code here...
    perform_task();
}
$ptime=time()//发送邮件前的当前时间
$interval=5//以秒为单位的间隔

如果(((time()-$ptime)我在代码中看到了一些东西

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

2.)例如,如果你使用一个好的库,如Swiftmailer,如果你发送了电子邮件,或者你有错误,你会得到一个简短的回复,你可以检查一下。正常的邮件功能也会这样做

最后一件事是,当你发送大量电子邮件时,今天的邮件发送是一件复杂的事情。例如,你必须注意很多事情,不要太快地将电子邮件发送给某个提供商,否则你会被阻止。例如,如果你有很多电子邮件,你应该每隔50-100封电子邮件就有一个超时时间。因此,只需重复发送100封电子邮件,然后等待几秒钟,然后再次发送

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


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

通常php脚本应该在不到2-3秒的时间内完成它的工作-越短越好,或者被认为非常慢。缓慢的事情应该在后台运行,例如由cron调度。您可以有脚本,每5分钟执行一次,在4:55工作。在后台执行的脚本通常没有执行时间限制,它们可以工作数小时,但不应该

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

此外,还应设置邮件功能的超时时间,可能为30秒。如果它不能在30秒内发送电子邮件,可能根本无法发送

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

另一种方法是只需5美元/月就可以获得VPS,将其配置为大规模电子邮件分发。在这种情况下,您需要为正确的设置支付一次费用,并为托管支付一点费用,也许为支持支付更多费用,因此您需要计算,什么对您更有利


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

你提到的
smtp详细信息服务器问题是什么?smtp服务器脱机吗?不管详细信息是什么。我只想知道,如果我在5分钟前没有得到ant响应,函数应该被中断,下一个代码应该被执行1。php脚本通常在出于安全原因而被终止时有一个超时,尽管这是可以配置的。2.每个smtp客户端实现都有一个超时设置,因为它是一个网络客户端。您使用什么类型的客户端?“smtp邮件对象”有点模糊。。。等待5分钟等待答复是完全没有意义的。10-20秒应该足够了。你可以使用php
sleep
函数来完成…我有hostgator smtp的详细信息。我正在使用zend_mail发送邮件。在smtp配置中是否有设置超时的选项?…然后您可以将其修改为循环!