【发布时间】:2011-07-19 08:12:08
【问题描述】:
我有几个关于 PHP 内存使用的问题。我将自己进行一些测试,但获得各种建议会很有帮助。
我最近了解了 PHP 函数 ignore_user_abort(),即使用户关闭页面,它也允许脚本继续运行。我正在考虑将它用于我的电子邮件通讯工具而不是 Cron 作业,因为配置 Cron 作业有很多麻烦。让用户留在页面上、使用 AJAX 请求以及在页面内容交付后运行部分脚本的替代方法也存在问题。
我的解决方案是在脚本的开头运行 call ignore_user_abort(true),在生成内容后的最后,调用 flush() 以进行良好的测量,然后运行时事通讯脚本。或者,使用 AJAX 执行此操作。
首先,有没有人发现这种方法存在问题?
其次,如果我使用没有设置时间限制的脚本,并且在每封电子邮件中都有一个while循环,那么如果我一次性完成它,内存使用情况会如何?因为我会覆盖变量,而不是使用新变量,所以我认为它会很低。
第三,因为如果我要发送大量电子邮件,比如每次运行 1000 封,我不想让我的邮件服务器过载。在我的 cron 作业中,我每 5 分钟运行一次脚本,发送一批 50 封电子邮件。如果我一次性执行此操作,我可以发送 50 封电子邮件,调用 sleep 5 分钟,然后再继续发送 50 封电子邮件吗?如果是这样,睡眠期间的脚本内存使用情况如何?这会是一种有效的方法吗?
我在这里真正想做的是想出一种方法来创建一个不需要复杂的(对于非技术人员)设置 Cron 作业的任务(这甚至不是共享主机上的一个选项),并且不需要用户在单个页面上保持浏览器打开。
欢迎任何想法建议或反馈。谢谢!
【问题讨论】:
-
memory_get_usage()会告诉你。 -
@alex 我做了一个基本测试,我记录了开始内存使用情况,循环了 100,000 次,将 MD5() 的值(基于循环迭代)分配给一个变量,并且看到最小的内存增加.我认为这意味着循环 1000 次以发送电子邮件的脚本不应比发送电子邮件 50 次的脚本增加太多。同样根据我的测试,脚本在睡眠周期中占用了相同数量的内存,虽然很难说。
-
这是您计划分发的东西吗?
-
@Dagon 是的,很有可能。你问什么原因?
-
我看到了一些问题。大多数主机会杀死需要很长时间的脚本,大多数主机会限制每天\每小时发送的邮件。这就是为什么如果您想发送任何重要数量的消息,大多数人都会注册其中一家 SAAS 时事通讯提供商(例如我工作的公司)。我认为 cron 方法比大多数共享主机的守护程序方式可靠得多
标签: php apache email cron newsletter