2013-08-20 92 views
0

所以我有一個php文件,它爲一系列id運行sql查詢集。該文件可能需要一些時間才能運行。同時訪問Session的多個文件

雖然這是運行,我想有一個進度條。

我擁有它,以便正在運行的文件更新一個會話變量,指出每組查詢後完成百分比。然後在我的前端,我正在對另一個讀取會話變量值並返回它的文件進行ajax調用。然後我用返回的百分比更新進度條填充的寬度。

問題: 只有在所有查詢都完成後,進度條纔會更新。所以我看到我的進度條在0%的情況下持續了幾秒鐘,然後突然跳到100%。看來會話被鎖定,直到腳本完成。我嘗試使用session_write_close(),但無法讓它工作。

謝謝。

+1

會話運行時,PHP中的會話文件被鎖定。所以從'session_start()'到'session_write_close()'。 [PHP和會話:有什麼辦法可以禁用PHP會話鎖定嗎?](http://stackoverflow.com/q/3371474/367456),[PHP session_start()導致HTTP請求掛起](http:///stackoverflow.com/q/2259112/367456)以及關於該主題的許多其他內容。因爲它是會議,你需要用它來擺弄它。 – hakre

回答

1

我有類似的問題,會議解決方案無法正常工作。我的解決方案是將當前狀態寫入臨時.txt文件,然後用ajax調用讀取該文件。

1

這樣做的問題是會話變量不存儲在運行時。他們將等到腳本完成之後纔將該變量存儲在會話中。一種解決方案是將臨時進程存儲在數據庫或文件中,並使用AJAX定期訪問數據。

另一種解決方案是使用服務器端JavaScript,如Googles V8 Engine (Node.js)和根據您的進度觸發事件。然後,您的頁面將根據正在觸發的JavaScript事件進行更新。