在后台运行PHP函数

时间:2010-08-25 16:48:49

标签: php email

我有一个小的重定向脚本,可以做两件事,

首先,它执行一封电子邮件(使用mail()func),然后才将该人重定向到新链接。

问题是,出于某种原因,我服务器上的邮件功能真的很慢,我不希望它影响我的任何访问者,

我如何仍然运行邮件功能,但不会影响访问者立即重定向到新链接?

谢谢,

7 个答案:

答案 0 :(得分:3)

您可以分叉处理电子邮件作为子进程:http://us2.php.net/manual/en/function.pcntl-fork.php

或者您可以将电子邮件写入数据库并在事后发送电子邮件处理电子邮件。

根据服务器配置,您可能会发现可以重定向用户flush(),然后发送邮件并使其仍然成功。

答案 1 :(得分:0)

如何将邮件放入数据库,然后运行cron发送邮件?

通过这种方式,您也可以控制邮件队列。

答案 2 :(得分:0)

这种后台处理的一种可能性是使用某种消息队列系统(AMQP,ZeroMQ,...)

答案 3 :(得分:0)

关于如何关闭连接但继续执行脚本有一个discussion on php.net。它涉及输出缓冲并发送Connection: close HTTP标头。

您还应该see this question

答案 4 :(得分:0)

hm ...如果您的服务器在* nix环境中运行,您可以使用pcntl_fork()分叉进程并在新创建的子进程中运行mail函数并同时继续重定向。

答案 5 :(得分:0)

结合使用external mail programsystem(或其中一个相关功能)和nice

答案 6 :(得分:0)

我之前使用fsockopen看到过它。基本上你所做的就是单独调用一个专门用于此任务的页面,并将其传递给你需要的任何GET变量。然后,被调用的页面将进行一些安全检查,例如确保IP在白名单中,args是有效的等等。

根据您要完成的任务,这可能会满足您的需求。