2012-10-05 88 views
2

我有一個頁面,用戶可以啓動後臺進程。如果用戶刷新頁面或關閉標籤或瀏覽器,我想停止此過程。試過connection_abort(),但沒有運氣,劇本剛剛開始運行。 任何想法?停止一個PHP後臺進程

+0

'websockets'可以做到這一點 – Baba

回答

0

我覺得你運氣不好。 http是一個無狀態的協議,只要您的頁面處於連接關閉狀態。

除了一些AJAX技巧,沒有辦法告訴用戶刷新或關閉瀏覽器。

+0

想到了,無論如何感謝 – slash197

0

如果您對用戶的唯一標識符,這樣就可以追平或進程ID一起存儲,以下邏輯可以工作:

  1. 用戶請求頁面
  2. 用戶被賦予一個唯一的id
  3. 後臺進程啓動並且它的id與用戶標識一起被登錄到數據庫
  4. 進程不斷檢查數據庫 - 以選定的頻率 - 檢查數據庫中的記錄,如果它不存在或者不像預期的那樣,該過程自行停止。
  5. 然後,你必須爲用戶無論前端既可以:
    • 觸發腳本(即stop_process.php用戶= ID?)通過AJAX時,它需要 - 即當頁面導航離開。由於onbeforeunload阻止或停止某些瀏覽器中的Ajax請求,因此此方法可能不可靠。
    • 有一個ajax輪詢腳本,不斷更新帶有時間戳的數據庫中的流程記錄,如果這個戳記過期 - 意味着用戶已經導航或停止了js - 那麼過程停止。

以上是一個相當複雜的解決方案(也可能氣質,因爲它依賴於JavaScript)所以也許應該只有在真正需要或認爲如果目標觀衆可以被鎖定。

作爲非js解決方案,您可以依賴輪詢方法並設置元刷新幀。然而,這可能會讓老版本的Internet Explorer用戶瘋狂地持續「點擊」。更不用說這個解決方案相當不雅。