执行php邮件脚本循环100多条记录的最有效方法

时间:2011-03-09 12:36:13

标签: php email command-line timeout performance

我有一个邮件脚本,通过大约900个订阅者(在数据库中)循环,为每个订阅者构建单独的电子邮件并通过SMTP发送。此脚本通过浏览器手动触发,但所涉及的记录数导致脚本开始超时。在测试中,错误几乎总是致命错误最大执行时间超过(尽管有一次与mail()和SMTP相关的错误)。我想我应该从命令行运行这种类型的脚本,但是,脚本仍然需要手动触发(通过CMS管理员用户) - 有没有人有任何建议来处理这个问题?

4 个答案:

答案 0 :(得分:1)

我认为您可以在脚本中设置PHP脚本的超时。

但是,我宁愿使用基于CRON + PHP-CLI的解决方案。无论使用CGI还是CLI,PHP代码都保持不变,但是在CLI模式下没有隐式时间限制。

答案 1 :(得分:1)

推迟运行时间限制只能暂时解决问题。

你没有说明这是什么操作系统 - 当然如果你有一个可能有帮助的本地MTA,但正确的解决方案是产生一个单独的过程。请注意,此方法存在许多缺陷 - 有关如何在Unix类型系统上正确执行此操作的详细信息,请参阅this post

答案 2 :(得分:0)

set_time_limit(0);应该做的。

除非我们看到你的代码,否则没有太多关于更有效方式的说法。

答案 3 :(得分:0)

使用cronjobs,每次cron执行脚本时都可以发送少量邮件。

例如,每5分钟调用Typo3 mailer engine,并检查是否需要发送任何邮件。

因此用户不会手动触发邮件脚本。用户只标记应由邮件引擎发送的简报。