2010-05-30 65 views
7

我有一個網站,其中有2頁,(home_page.php和action_page.php)操作頁面需要aprx。 2分鐘完全加載(服務器端需要2分鐘)。但是,如果用戶在加載操作頁面時單擊主頁鏈接,則瀏覽器不會進入主頁,直到操作頁面被完全加載。如果主頁在新選項卡中打開,則也是如此。每個用戶在同一時間2個不同的PHP請求

首先這是什麼原因? (bowser?php?apache?),我該如何避免這種情況?

謝謝

回答

10

更可能是因爲會話被鎖定。 PHP將只允許每個會話一次請求以防止出現問題(覆蓋數據等)。請參閱:session_write_close() ...

+0

好吧,我只是將這個函數添加到動作頁面的頂部,現在看起來很完美。 – 2010-05-30 13:46:59

+0

它是否也可以解決ajax調用的問題?如果我讓2個Ajax調用到相同的頁面,然後第二個Ajax調用只會在第一個完成處理後回答。只有啓用會話時纔會發生這種情況。當我從php頁面中刪除會話時,任何一個呼叫都可能首先響應。這是同樣奇特的PHP會話行爲? – 2010-05-30 14:03:39

+0

嗯,這不是一個「奇怪」的行爲,它是非常想要的。有兩種方法可以避免該問題。要麼儘快關閉會話,要麼儘快關閉會話,或者加快頁面的速度,即使有鎖定,也只能持續很短的時間(因此不會被注意到)。 – ircmaxell 2010-05-30 14:11:11

1

如果該頁面需要2分鐘才能加載,那麼您將達到典型瀏覽器的網絡超時限制。加載頁面的時間非常長。您可能想考慮產生一個單獨的進程來處理長時間處理。您可以將結果放入數據庫,文件等中,並使用輪詢來檢查是否完成。

當產生一個進程(exec())時,確保你使用nohup,背景它(&)並將錯誤輸出直接指向/ dev/null,否則它不會斷開與web進程的連接,並且web進程將等待它完成。

0

另外,看看你的調試設置,如果你正在開發。我有這個在我的.htaccess中:

php_flag xdebug.remote_enable on 
php_flag xdebug.remote_connect_back on 
php_flag xdebug.remote_autostart on 

而且創建相同的行爲。

相關問題