PHP和后台进程

时间:2015-02-25 09:34:21

标签: php shell-exec long-running-processes

我正在开发一个群发邮件系统。在我们发送2-4K电子邮件时,电子邮件联系人使用PHPexcel库以相同数量的电子邮件导入。 昨晚,当我们发送2k电子邮件时,我们收到“500内部服务器”错误。

我想我应该开发电子邮件处理和联系人导入的新流程,对吗?如果是这样,我该怎么做?有没有其他方法可以克服这500个错误?

PHP脚本由Web浏览器调用,浏览器将其加载5-10分钟,然后发生500错误。我正在使用PHPMailer库发送邮件。

1 个答案:

答案 0 :(得分:1)

从Web浏览器调用长时间运行的PHP脚本与在后台运行PHP并不完全相同。这将锁定一个Apache线程,并且很可能受到PHP配置的任何超时限制。我的猜测是在发送完成之前超时。

最好在cron上执行此操作。以下是一些一般性指示:

  • 每隔十分钟,从数据存储中选择下一组未发送的电子邮件地址,可能是其中的100个。
  • 向每个人发送电子邮件,记录您已完成的工作
  • 暂停几秒钟。这很有帮助,因为它使您的邮件不太可能被定向到垃圾邮件箱
  • 如果您的脚本已运行超过五分钟,请退出(它将在下一次cron调用时执行下一组电子邮件地址)
  • 否则,循环回到开始

这将更加可靠。对于奖励积分,请写一个网页,向您显示发送的电子邮件以及仍在等待的电子邮件。此外,您可能希望使用第三方邮件系统,如MailChimp,以提高您的交付可靠性。确保所有收件人都选择接收您的电子邮件。

我建议脚本应该以100个为一组进行批处理,运行5分钟,每隔10分钟调用一次,并在每次发送后暂停几秒钟 - 但这些只是示例。如果您不介意发送得更慢(例如一夜之间),那么您可以更改这些数字以适应。发送速度越慢通常越可靠,如果可以,请这样做。