2017-02-23 44 views
0

我目前有一個PHP腳本在後臺運行,正在執行一個讀取大表的PHP腳本。同時它將結果發送到API。這是通過無緩衝的查詢完成的。PHP將用戶返回到在後臺連續運行的腳本

在此腳本的頂部,我已經把

ignore_user_abort(true); 
set_time_limit(0); 

爲了直到它完成後臺確認腳本運行。我也有一個從這個腳本獲得進度報告的Javascript。但是,當頁面重新加載時,進度會再次開始,並且會開始再次將數據發送到API複製數據。

我想知道是否有方法讓用戶繼續使用腳本。所以腳本已經在後臺運行了,但是有沒有辦法讓用戶返回腳本,這樣就可以像他們從未離開過?

EX:

用戶開始進口,進口是200行出100萬。他們刷新頁面,頁面顯示100萬行中有202行。由於在後臺執行腳本,因此用戶離開時導致更多行導致行數超過202 mil。

先進的感謝您

+1

你是如何通過JavaScript獲取進度報告的? – apokryfos

+0

我向PHP腳本發出一個AJAX請求,PHP腳本在每行完成後會向AJAX回送一條消息。因此,會通知用戶有多少行被導入 – Dashwood

+0

您是否讓用戶上傳一個文件來將數據導入數據庫? – Augwa

回答

0

您可以使用websocket來處理這種情況。當你將建立新的連接到websocket時,你可以將連接存儲在cookie中。然後當你重新加載頁面時,你可以重新連接到websocket服務器。最重要的是,你需要一個可以從cookie變量讀取的websocket服務器。

+0

你能提供一個這樣的例子嗎?建立一個websocket服務器是沒有問題的,我猜你的意思是通過使用類似socket.io – Dashwood

0

這可以使用cookie來完成嗎?

每次運行時,更新所述cookie,然後如果頁面被刷新,使用cookie中的信息來啓動停止並更新頁面的位置?

+0

那麼腳本將繼續在後臺運行,因爲它將讀取大型表,如3億行。這個想法是開始進展,能夠離開並讓它運行,隨時回來並檢查進度 – Dashwood