php - PHP 执行时间:如何使用 symfony 系统测量
问题描述
我正在尝试在 symfony 3.4 系统中使用 PHP 发送更多的电子邮件。现在脚本由于 php 时间执行限制而停止,我当然需要解决这个问题。
我的想法是将所有要发送的电子邮件放在一个表 email_queue 中,然后将它们保存在队列中后发送。
所以我正在保存所有这些电子邮件,显示一个带有进度条的页面并进行 ajax 调用,该调用应该在时间限制内发送电子邮件,报告它发送了多少(以更新进度条)以及是否有问题留在队列中,再次调用 scipt 直到发送所有内容。
到目前为止,一切都很好。现在我尝试测量 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 秒,但是脚本执行停止了。
我已经做了很多研究,但我就是不明白为什么我的脚本做了不应该做的事情。任何想法将不胜感激。