是否可以使用PHP脚本继续处理电子邮件并将数据返回给用户?

是否可以使用PHP脚本继续处理电子邮件并将数据返回给用户?,php,cron,swiftmailer,Php,Cron,Swiftmailer,我正在向现有网站添加电子邮件功能,并尝试以一种需要最少用户等待时间的方式将其集成 我的最新计划是在应用程序开始发送实际电子邮件时,提出用户的请求,这样我就可以返回一个页面,并向用户发送一条消息,说明他们的消息正在发送。我想防止由于用户请求需要发送许多单独的电子邮件而导致的长时间延迟 我已经考虑过甚至实现了一个cron作业解决方案,但是我认为设置它的工作量太大了——我希望能够在Linux机器上实现它,而不必担心设置cron作业 除了创建新的数据库连接和关闭用户会话的问题之外,还有什么问题吗?在我使

我正在向现有网站添加电子邮件功能,并尝试以一种需要最少用户等待时间的方式将其集成

我的最新计划是在应用程序开始发送实际电子邮件时,提出用户的请求,这样我就可以返回一个页面,并向用户发送一条消息,说明他们的消息正在发送。我想防止由于用户请求需要发送许多单独的电子邮件而导致的长时间延迟

我已经考虑过甚至实现了一个cron作业解决方案,但是我认为设置它的工作量太大了——我希望能够在Linux机器上实现它,而不必担心设置cron作业


除了创建新的数据库连接和关闭用户会话的问题之外,还有什么问题吗?在我使用pcntl_fork管理电子邮件之前,有没有什么问题需要尖叫不要这样做?cron作业是否比我没有看到的分叉有好处?

最简单的解决方案是实现一个数据库支持的电子邮件队列,其最简单的形式如下所示:

当用户提交表单时,将消息参数sender、recipient、message等写入数据库表,包括时间戳,例如在消息提交时名为created_的列中。 然后,您可以立即向用户显示成功页面。 让cronjob处理数据库表SELECT*FROM mytable ORDER BY created_at DESC,发送电子邮件,或者从表中删除行,或者将条目标记为已发送,例如在发送时添加一列。
您可以分叉PHP进程,但这会使应用程序的编码和可移植性变得更加困难,因此我不建议您这样做。

一定要一直这样做,通常执行'semdemail.PHP>/dev/null&';一些聪明的人会发布使用ajax的帖子,但只是忽略它们。所以我对exec的唯一想法是,如果两个用户提出了请求怎么办?我需要处理任何竞争条件吗?不太可能,但这取决于sendmail中的内容。phpi会说,将电子邮件地址发送到另一个脚本以便立即处理更简单,您的方法看起来有些过分。我想这取决于观点-在我看来,分叉PHP进程只是为了发送电子邮件也太过分了:。发送这样的电子邮件并不是一个昂贵的过程——如果关键是能够同时处理大量请求,那么分叉过程就没有帮助,由于并发进程的数量有限——将电子邮件发送过程推迟到CrOnWork不会导致瓶颈。如果有大量并发请求,我不认为进程计数。我倾向于分叉,因为我的共同主人哎哟。。15分钟后杀死PHP脚本。我想我会使用CRON的工作路线来提供这些信息。对于那些有类似脚本时间限制的人,您可以通过分叉脚本并摆脱父脚本来重置主机的计时器。这允许我运行类似于守护进程的脚本,而不会有主机关闭的风险。对我来说,围绕主机的规则编码似乎是个坏主意。移动到支持您的要求的主机