看來有些東西阻止了兩個相同的PHP請求併發執行。我不確定這是我的瀏覽器,Apache還是PHP。 我已經在Firefox和Chrome(相對較新的版本)中進行過測試。使用Apache/2.2.22(apache2-mpm-prefork)和PHP 5.4.9-4ubuntu2(libapache2-mod-php5)。PHP(或apache)正在阻止異步請求
我第一次假設這個問題會與會話有關,並且試圖調用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腳本重現此問題。