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

发布于 2024-10-20 19:01:14 字数 227 浏览 3 评论 0原文

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

I have a mailing script which loops through approx 900 subscribers (in database), building an individual email for each subscriber and sending via SMTP. This script is fired manually via the browser, however the number of records involved have resulted in the script starting to time out part way through. In tests, the error is almost always Fatal Error max execution time exceeded (although one time there was an error related to mail() and SMTP). I'm thinking that I should probably be running this type of script from the command line, however, the script still needs to be triggered manually (via a CMS admin user) - does anyone have any suggestions for a good way to handle this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

只为守护你 2024-10-27 19:01:14

我认为您可以从脚本内设置 PHP 脚本的超时。

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

I think you can set the timeout for a PHP script from within the script.

However, I'd rather use CRON+PHP-CLI based solution. The PHP code remains the same whether you use CGI or CLI, however, in CLI mode there is no implicit time limit.

可爱咩 2024-10-27 19:01:14

调整运行时间限制只会暂时推迟问题的发生。

您没有说明它在什么操作系统上运行 - 当然,如果您有本地 MTA 可能会有所帮助,但正确的解决方案是生成一个单独的进程。请注意,这种方法存在许多陷阱 - 请参阅 这篇文章详细介绍了如何在 Unix 类型系统上正确执行此操作。

Tweeking the run time limit will only temporarily defer the problem.

You didn't say what OS this is running on - certainly if you've got a local MTA that may help, but the right solution would be to spawn a seperate process. Note that there are a number of pitfalls in this approach - see this post for details of how to do it correctly on Unix type systems.

遥远的她 2024-10-27 19:01:14

设置时间限制(0);应该可以解决问题。

关于更有效的方法没有太多可说的,除非我们看到你的代码......

set_time_limit (0); should do the trick.

There is not much to say about more efficient way, unless we see your code....

最初的梦 2024-10-27 19:01:14

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

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

因此用户不会手动触发邮件脚本。用户仅标记应由邮件程序引擎发送的新闻通讯。

work with cronjobs and every time the cron executes the script it can send a small amount of mails.

For example the Typo3 mailer engine is invoked every 5 minutes and will check if any mails need to be sent.

So the user doesnt manually trigger the mailing script. The user only marks a newsletter which should be send by the mailer engine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文