首先,我不是在尋找ignore_user_abort。 相反,我尋找一個函數來完成輸出並將文檔發送給用戶。在那之後,我想讓php腳本做額外的過程,這需要花費一秒鐘,而不會對用戶產生影響,只有後臺進程。PHP:輸出完成後繼續
用戶也沒有理由等待它完成。產出已經準備好趕上。 PHP是否提供了關閉與用戶的連接的功能,但在服務器上保留一段時間以完成工作?
首先,我不是在尋找ignore_user_abort。 相反,我尋找一個函數來完成輸出並將文檔發送給用戶。在那之後,我想讓php腳本做額外的過程,這需要花費一秒鐘,而不會對用戶產生影響,只有後臺進程。PHP:輸出完成後繼續
用戶也沒有理由等待它完成。產出已經準備好趕上。 PHP是否提供了關閉與用戶的連接的功能,但在服務器上保留一段時間以完成工作?
php-fpm的最佳功能之一你是fastcgi_finish_requests()。這將完成客戶端的會話並在服務器端繼續進程。 對於通過cron進行的queque或延遲處理來說,它也是消息傳遞的最佳用例。
但是,它僅限於php-fpm!
你應該把你的工作分成2個文件(一個是初始化處理,產生輸出),另一個重要的需要幾秒鐘的時間,但不應該讓用戶等到完成。
然後,讓瀏覽器用Ajax或隱藏的iframe
調用它。
您甚至可以讓第二個腳本返回成功/失敗通知,並通過JavaScript捕獲該通知以通知用戶,而不影響其實際的初始輸出。
看起來像你想要的是一些AJAX的東西。 如果您將響應發回給用戶,腳本將結束。 但使用JavaScript,你可以開始一個Ajax調用另一個PHP腳本,不會改變任何用戶。
與真理的建議相同的缺點:-( – ledy
腳本運行後,將一個條目添加到隊列表中。然後運行一個cron作業來處理隊列,鎖定記錄,然後在處理它們時刪除它們,所以如果你的cron重疊,他們不會做同樣的工作兩次。
即它不能在發送輸出時發送_instantly_?所有數據當輸出被髮送時,它在最後一行的高速緩存中,當通過cron加載或稍後加載時,在完成最後一步之前必須讀取或再次加載所有信息。 – ledy
聽起來像延遲作業處理。谷歌那。 – keymone
我相信你可以在這裏找到答案: http://stackoverflow.com/questions/124462/asynchronous-php-calls –