我想在symfony 3.4系统中使用PHP发送更多的电子邮件。现在脚本由于php时间执行限制而停止,当然我需要解决这个问题。
我的想法是将所有电子邮件发送到表email_queue中,然后在将它们保存到队列中后发送。
所以我正在保存所有这些电子邮件,显示一个带有进度条的页面并进行ajax调用,该调用应该在时间限制内发送电子邮件,报告发送的数量(更新进度条)和如果队列中遗留了某些内容,则会再次调用该片段直到发送完所有内容。
到目前为止一切顺利。现在我尝试测量ajax脚本部分的执行时间,以便在达到30秒的时间限制之前停止发送。 现在由于某种原因,测量总是小于30秒,但在测量的执行时间甚至达到2秒之前,脚本由于达到时间限制而停止。为什么会这样? 这就是我测量的方法:
$executionTimes = [];
$executionPoints = [];
$timeStart = $_SERVER['REQUEST_TIME_FLOAT'];
foreach ($mailQueue as $mail) {
// do some mail configuration
// send the email
$now = microtime(true);
$executionTime = $now - $timeStart;
$executionTimes[] = $executionTime;
$executionPoints[] = $now;
if ($executionTime >= 10) {
break;
}
}
// return data
使用$_SERVER['REQUEST_TIME_FLOAT']
我以为我会得到真正的执行时间,包括所有的symfony开销。这不正确吗?
以下是一次运行的结果:
{
"timeStart": 1525702394.248,
"executionPoints": [
1525702394.863065,
1525702394.866609,
1525702394.870812,
1525702394.874702,
1525702394.878718,
1525702394.882434,
1525702394.886418,
1525702394.890428,
1525702394.894365,
1525702394.899119
],
"executionTimes": [
0.6150650978088379,
0.6186091899871826,
0.622812032699585,
0.626702070236206,
0.6307179927825928,
0.6344339847564697,
0.6384181976318359,
0.6424281597137451,
0.6463651657104492,
0.6511189937591553
]
}
所以上次执行测量的时间不到0.7秒,但脚本执行停止了。
我已经做了很多研究,但我无法弄清楚为什么我的脚本不应该做的事情。任何想法都将受到高度赞赏。