【发布时间】:2014-06-22 12:48:38
【问题描述】:
我在 Windows 7(使用 VirtualBox VM)上进行一些开发。我有 PHP/5.5.13、Apache 2.4.9、Chrome 35.0.1916.153。当我运行以下代码时,我看到了一些非常不一致的行为:
index2.php
<?php
echo "Load time before 'file_get_contents': ".(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'])."<br/>\r\n";
echo file_get_contents('http://custom.local/index3.php');
echo "Load time after 'file_get_contents': ".(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'])."<br/>\r\n";
exit;
?>
index3.php
<?php
echo "Load time inside 'index3.php': ".(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'])."<br/>\r\n";
exit;
?>
这是 Chrome 中的结果(在 curl_exec 之后,我得到了一致的响应时间在 8 到 28 秒之间)。响应时间也波动很大:
Load time before 'file_get_contents': 0.002000093460083
Load time inside 'index3.php': 0.0026569366455078
Load time after 'file_get_contents': 15.411452054977
【问题讨论】:
-
我可以补充一点,我刚刚卸载/重新安装了 Chrome 并得到了相同的结果。我刚刚重新安装了 Fiddler,显然当 Fiddler 运行时,我得到了正常行为(响应时间低于 10 毫秒)。这可能是 Chrome 代理设置的错误 - Fiddler 行为不端?
-
不要添加 cmets - 编辑问题;时间戳实际上会更有用,因为它会澄清延迟发生的位置。但是:您所知道的 atm 是 curl 请求在 0.002 秒内处理完毕。这意味着该请求在网络服务器上停止了 26.71 秒,然后才传递给 php。一个典型的原因是达到网络服务器可以处理的最大客户端数 - 检查您的网络服务器日志以获取相关消息。
-
刚刚添加了一个更新 - 感谢您的建议,但除非我没有调整正确的设置,否则它没有任何区别。我之前也想过这个……但是由于这是在此服务器上运行的唯一测试,我看不出它如何使用所有线程。日志中也没有任何内容。
-
消除一个原因仍然是一个进步,但由于它看起来像某种网络问题而不是代码相关,它很可能被认为是 SO 的题外话。或者,提琴手必须有某种检查信息才能查看。
-
是的,我不知道问题是什么...我看到了另一个类似的帖子但没有答案:stackoverflow.com/questions/19319677/…
标签: php apache google-chrome curl fiddler