如何在PHP

时间:2015-12-07 08:47:38

标签: 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;
    } else {
        return 0;
    }
}

参见上面的perform_task函数。首先我获取所有记录,并且对于每条记录我都调用mail()函数发送邮件但是由于smtp详细信息服务器问题,我无法从邮件功能获得任何响应,5分钟后我的脚本中断并给我致命错误,我无法更新DB中的状态。我想处理此错误。我想在5分钟后中断邮件功能。如果我从邮件功能得到任何响应,那么我想要更新状态失败。

PHP中是否有任何超时功能?

3 个答案:

答案 0 :(得分:1)

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

1。)您应该将mail功能重命名为sendMail。当你使用与内部函数相同的名称时,它非常混乱。

2。)如果您使用像Swiftmailer这样的好的库,例如,如果发送电子邮件或者您有错误并且您可以检查,那么您会得到一个简短的回复。普通邮件功能也是这样做的。

最后一件事是,当您发送大量电子邮件时,今天发送邮件是一件复杂的事情。您必须查看很多内容,例如您不会将电子邮件发送到一个提供商的速度太快,否则您将被阻止。如果你有很多电子邮件,你应该每50到100个电子邮件超时一次。因此,只迭代100多封电子邮件,然后等待几秒钟再发送一次。

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

Swiftmailer有一个限制发送的功能。在那里你可以说系统应该在一次迭代中发送多少。

答案 1 :(得分:0)

检查出来:

$ptime=time();  //current time before sending mail
$interval=5;    //interval in seconds
if(((time() - $ptime) <= $interval){
    //execute code here...
    perform_task();
}

答案 2 :(得分:0)

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

另一种方式 - 使用某种标志,因此当一个脚本副本正在运行时,另一个脚本会在执行时退出。并安排脚本每分钟执行一次。

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

对于大量的电子邮件发布,最好通过他们的API使用某种专业服务。

另一种方法是让VPS只需5美元/月,配置它用于大量电子邮件分发。在这种情况下,您将需要支付适当的设置一次并支付一些托管费用,可能还需要一些支持,所以您需要计算,哪些更适合您。

如果您希望以适当的方式快速发送电子邮件,那么应该做的最少。