【发布时间】:2014-03-04 10:32:04
【问题描述】:
我尝试将消息邮寄给许多订阅者。我需要执行我的脚本长时间,max_execution_time 允许的时间更长。我可以使用 Cron Tab,它每次都会按计划执行我的脚本,但是我可以在没有 cron 选项卡的情况下执行此操作吗?我尝试这样的事情:
$maxTime = ini_get('max_execution_time');
$startTime = time();
foreach ($emails as $email) {
if (time() < $startTime + $maxTime - 2) {
// do something
} else {
// reload this page
}
}
它运行良好,但是如果我在浏览器选项卡中关闭此页面,它就会死掉并且不会重新加载。我提醒一下,我正在寻找实现这个没有 Cron Tab。我想手动开始执行一次,然后在后台运行。
注意:另外我想指出,我不考虑在这个阶段服务器上的负载和发送邮件的可能间隔!
【问题讨论】:
-
线程化 php 会在限制内拆分工作而不触发您的主机施加的执行超时如何?
-
我无法在托管时禁用 max_execution_time。我现在有 30 秒的限制
-
set_time_limit(0);让它永远不会超时 -
@micb 谢谢,但我使用的是共享主机,
set_time_limit功能已被主机禁用。 ( -
@Victor 你可以用
header("Location: http://domain.com/process.php?lastId=1");做到这一点。发送每条记录后,页面将重新加载,然后您只需将其传递给标题函数的最后一个 ID 即可。然后你可以让它从它停止的地方开始。这应该可以解决 30 秒超时问题,但在共享主机上,如果您开始使用大量服务器资源,您可能会发现托管您网站的公司会感到不安。