2012-05-06 115 views
1

我有一個用戶轉到網址時發生的操作。該操作涉及大量的插入 - 更新MYSQL數據庫,並且需要花費很長時間才能完成。我想知道即使用戶切換到另一個頁面,此操作是否仍然存在?我希望如此,因爲PHP是服務器端。但我想對此有一個明確的解釋。任何人?HTTP請求和PHP進程

+0

。那麼用戶的操作與他運行腳本無關。 – 2012-05-06 21:02:16

回答

4

不,Apache和PHP的默認操作是在用戶斷開連接時終止腳本。這種終止可能會在連接斷開後的任何時候發生,因此腳本可能會運行數小時,或者可能會立即死亡。通常,當腳本嘗試執行任何輸出時會發生kill。

如果你需要保持,儘管用戶斷開連接的運行腳本,那麼你就必須在這種情況下,你爲什麼不運行在後臺任務使用

ignore_user_abort(TRUE); 
+0

我剛剛注意到,實際上即使用戶試圖轉到其他頁面,也不可能在腳本完成之前。我該如何做到這一點,以便我可以給用戶回覆一條消息,說明正在執行腳本,並在用戶完成時收到通知。然後用戶可以繼續在我們的服務器上執行腳本時執行其他操作。 – nezgerland

+0

你在使用會話嗎?當腳本正在使用它時,PHP會鎖定會話文件。您必須在長時間運行的腳本中使用'session_write_close()'來允許其他並行請求繼續。 –

+0

是的,我正在使用會話。而不是做session_write_close(),所以這對我來說絕對是有趣的:) ..謝謝! – nezgerland