0

似乎有什么东西阻止了两个相同的 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&amp;1"></iframe>
    <iframe src="<?=$_SERVER['REQUEST_URI'];?>?frame&amp;2"></iframe>
</div>
</body>
</html>

干杯,大卫

编辑:我不认为这与 PHP 相关,我也设法使用 CGI 脚本重现了这个问题。

4

1 回答 1

0

我认为您的问题是 HTTP 和浏览器处理缓存方式的结果。浏览器发送一个请求,假设它可以将结果用于两个 iframe。然而,PHP 默认发送 Cache-Control: no-cache, must-revalidate HTTP headers。当浏览器看到此标头时,它会发送另一个对第二个 iframe 的请求。这就是为什么第二组 iframe 可以按预期工作的原因,因为浏览器会立即发送两个请求,因为 URL 不同。

于 2013-05-31T08:57:11.863 回答