PHP继续发送电子邮件但停止加载页面?

时间:2012-10-15 23:28:08

标签: php

我的页面执行的脚本需要相对较长的时间才能完成。我想这样做,以便用户可以提交信息,立即回显“完成”,并允许用户在脚本继续执行时退出页面。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

使用cron。在您的页面上创建一个电子邮件任务并保存在db或fs中 - 无所谓。创建一个每n分钟运行一次的脚本,用于获取电子邮件任务并执行它们。

不幸的是,您的托管可能没有cron支持......

答案 1 :(得分:2)

电子邮件自然很慢。我建议你使用工作队列来收发电子邮件。你应该看看

使用这些解决方案,您可以对慢速任务进行排队,并继续向用户显示有效信息和进度。

示例客户端

$client= new GearmanClient();
$client->addServer();
$client->do("email", json_encode(array("A@yahoo.com","Hello World","This is your first Mail")));
echo "Welcome To XYZ" ;

服务器

$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction("email", "sendMail");
while ( $worker->work() );

function sendMail($mail) {
    list($to, $subject, $message) = json_decode($mail);
    return mail($to, $subject, $message);
}

答案 2 :(得分:1)

我的建议是将所有信息提交到表格行或类似的数据结构中,然后每隔几分钟运行一次cronjob以遍历每一行并根据已提交的信息运行脚本。

这会有点复杂,我担心,但它会立即释放用户(一旦原始信息存储到数据库中)