似乎某些事情阻止了两个相同的PHP请求同时执行。我不确定这是我的浏览器,Apache还是PHP。 我已经在Firefox和Chrome(相对较新的版本)中进行了测试。使用Apache / 2.2.22(apache2-mpm-prefork)和PHP 5.4.9-4ubuntu2(libapache2-mod-php5)。
我首先假设此问题与会话相关,并尝试调用session_write_close()
,但无效,即使我没有使用会话自动启动。我还使用了Chrome的开发人员工具并检入了/ var / lib / php5,并且没有发现任何与正在创建的会话相关的内容。
我整个下午都在摸着这个问题,但找不到相关的问题。
我已将我的测试用例简化为单个PHP脚本(如下所示),如果您可以重现这一点,请告诉我,和/或解释一下:
<?php
if (isset($_GET['frame'])) {
echo 'Hello world at '. time(). '<br>URI: '. $_SERVER['REQUEST_URI'];
sleep(2);
exit;
}
?><!DOCTYPE html>
<html>
<body>
<div style="background-color: #eee;">
<p>If the two times below are different by around 2 seconds (or more), stuff is broken (or not working as I expected).</p>
<iframe src="<?=$_SERVER['REQUEST_URI'];?>?frame"></iframe>
<iframe src="<?=$_SERVER['REQUEST_URI'];?>?frame"></iframe>
</div>
<hr>
<div style="background-color: #eee;">
<p>The two iframes below are doing the same thing as the two iframes above, except they have an additional query string parameter, this seems to prevent the scripts from blocking.</p>
<iframe src="<?=$_SERVER['REQUEST_URI'];?>?frame&1"></iframe>
<iframe src="<?=$_SERVER['REQUEST_URI'];?>?frame&2"></iframe>
</div>
</body>
</html>
干杯, 大卫
编辑:我认为这与PHP无关,我也设法使用CGI脚本重现了这个问题。答案 0 :(得分:0)
我认为您的问题是HTTP和浏览器处理缓存的方式的结果。浏览器发送单个请求,假设它可以将结果用于两个iframe。但是,PHP默认发送Cache-Control:no-cache,必须重新验证HTTP头。当浏览器看到此标头时,它会发送另一个第二个iframe请求。这就是第二组iframe按预期工作的原因,因为浏览器会立即发送两个请求,因为URL不同。