【问题标题】:PHP and background processesPHP 和后台进程
【发布时间】:2015-02-25 09:34:21
【问题描述】:

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

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

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

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请参阅“如何提问”页面以获得澄清此问题的帮助。
  • 您尚未确定服务器错误的根本原因。在你做任何事情之前,你所做的一切都是基于猜测。阅读服务器错误日志。
  • 我只是想为邮件发送脚本和联系人列表导入脚本创建另一个后台进程
  • “500 内部服务器错误”听起来像是来自 Apache,但要在后台进程上发送电子邮件,您不需要 Web 进程。这是在 cron 上(或者您使用什么方法在后台运行它)?你是如何调用 PHP 脚本的?您使用的是wget 还是curl? (由于细节不足,此问题可能会关闭,但如果您对其进行更详细的编辑,我将投票重新打开)。
  • 我已编辑问题描述,请查看一次。

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


【解决方案1】:

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

最好在 cron 上执行此操作。以下是一些通用的提示:

  • 每十分钟,从您的数据存储中选择下一组未发送的电子邮件地址,可能是 100 个。
  • 向每个人发送一封电子邮件,将您所做的事情记录到数据库中
  • 暂停几秒钟。这很有帮助,因为它可以减少您的邮件被定向到垃圾邮件箱的可能性
  • 如果您的脚本已运行超过五分钟,请退出(它将在下一次 cron 调用中执行下一组电子邮件地址)
  • 否则,循环回到起点

这样会更可靠。要获得奖励积分,请编写一个网页,向您展示哪些电子邮件已发送,哪些仍在等待。此外,您可能希望使用像MailChimp 这样的第三方邮件系统,以提高您的投递可靠性。确保您的所有收件人都确实选择接收您的电子邮件。

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

【讨论】:

猜你喜欢
  • 2011-03-31
  • 1970-01-01
  • 2011-11-27
  • 2010-09-07
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多