例如,有一個非常簡單的PHP腳本,用於更新數據庫中的某些表,但這個過程需要很長時間(可能需要10分鐘)。因此,即使用戶關閉了瀏覽器,我也希望此腳本繼續處理,因爲有時用戶不會等待,他們會關閉瀏覽器或轉到其他網頁。即使用戶關閉瀏覽器,PHP腳本能否繼續運行?
回答
直接回答你的問題,請參見ignore_user_abort
更廣泛地說,你可能有一個架構問題就在這裏。
如果許多用戶可以啓動這些東西,那麼您會希望Web應用程序將作業添加到某種類型的隊列中,並擁有一定數量的後臺進程來咀嚼所有工作。
無論客戶端在做什麼,服務器端腳本都會繼續執行。
編輯:順便說一句,你確定你想要打開10分鐘的網頁嗎?我建議你使用一個任務隊列(其項目由cron及時執行)並將用戶重定向到「好的,我在上面」頁面。
如果腳本完全基於服務器(沒有反饋給用戶),即使客戶端關閉,也會執行此操作。
PHP的通用體系結構是客戶端向腳本發送請求,以向用戶提供答覆。如果沒有返回給用戶,即使用戶不在另一邊,腳本仍然會執行。更簡單一點:在常規腳本中,它們在服務器和客戶端之間沒有固定的連接。
注意總是對的:http://php.net/manual/en/function.ignore-user-abort.php – timdev 2009-11-01 21:50:13
您可以使用包含時間和運行命令的crontab文件每20分鐘運行一次PHP腳本,在這種情況下,它將是php腳本。
這是除了在這裏問的問題... – jldupont 2009-11-01 21:49:37
是的。服務器不知道用戶是否關閉了瀏覽器。至少它沒有立即注意到。
否:服務器可能(取決於它的配置方式)不允許php腳本運行10分鐘。在廉價的共享主機上,我不會依賴運行時間超過合理響應時間的腳本。
如果任務需要10分鐘,請不要使用瀏覽器直接執行它。您有許多其他選項:
- 使用cronjob定期執行任務 。
- 讓瀏覽器 請求插入新行到 數據庫表,以便定期 的cronjob可以處理新行和 與 適當的參數
- 有 瀏覽器請求寫的消息執行PHP腳本到 隊列系統,其具有用戶 監聽這樣的事件(然後 執行腳本)。
雖然其中一些建議可能是矯枉過正您的具體情況,關鍵,結合特點是取消夫婦從作業的執行瀏覽器請求,以便它可以異步完成。
如果您需要瀏覽器窗口隨進度一起更新,則需要使用定期執行的AJAX請求來檢索作業狀態。
+1爲我的答案更好,更具體的版本。 – timdev 2009-11-01 21:58:39
所以如果我想解除執行作業的瀏覽器請求,我怎麼能請求另一個php腳本,而用戶的當前請求繼續正常。所以,當用戶請求任何url時,這個請求將啓動另一個腳本(它獨立於用戶瀏覽器和其他請求)。用戶將繼續在網站上正常衝浪 我該怎麼做? – 2009-11-01 22:09:56
查看這些要點?這些都是做到這一點的方法。在大多數情況下,設置一個保存後臺進程輸入的小數據庫表格可以正常工作。然後,您可以啓動一些PHP腳本來執行作業,通過cron或其他方法。 – timdev 2009-11-01 22:19:11
PHP腳本將在客戶端終止連接後繼續運行(不這樣做會帶來安全風險),但最多隻能到max_execution_time
(在php.ini中設置或通過PHP腳本設置,默認通常爲30秒) ..
例如:
<?php
$fh = fopen("bluh.txt", 'w');
for($i=0; $i<20; $i++) {
echo $i."<br/>";
fwrite($fh,$i."\n");
sleep(1);
}
fclose($fh);
?>
開始運行在瀏覽器中並關閉瀏覽器完成之前。您會發現20秒後該文件包含$i
的所有值。
將for循環的上限更改爲100而不是20,並且您會發現它僅從0運行到29個。由於PHP的max_execution_time
腳本超時並死亡。
- 1. 即使我關閉瀏覽器,繼續進行會話
- 2. 用戶關閉瀏覽器後Node.js是否可以繼續運行?
- 3. .NET會話 - 持續會話,即使用戶關閉瀏覽器
- 4. 即使在用戶關閉應用程序後,是否有可能繼續運行倒數計時器
- 5. 關閉瀏覽器後,Google應用腳本停止運行
- 6. 即使有異常情況,flyway能否繼續執行腳本?
- 7. 即使頁面/瀏覽器關閉或刷新,多個定時器繼續(在後臺運行)
- 8. Visual Studio Android模擬器即使在關閉後也能繼續運行
- 9. 在瀏覽器關閉後繼續執行存儲過程
- 10. 檢測用戶瀏覽器是否關閉瀏覽器
- 11. 運行很長時間執行php腳本甚至瀏覽器關閉
- 12. 關閉瀏覽器會阻止PHP腳本執行完嗎?
- 13. 在瀏覽器關閉時停止執行php腳本
- 14. 想關閉網頁瀏覽器後繼續運行交換遷移代碼
- 15. Python腳本繼續運行使用pyRserve
- 16. 如何使用angularjs運行計時器構建,即使瀏覽器已關閉
- 17. 即使在瀏覽器關閉的情況下在後臺運行功能
- 18. Python腳本繼續運行
- 19. 的fsockopen並關閉在PHP連接,但繼續執行腳本
- 20. 即使瀏覽器被客戶端關閉,也使用PHP發送郵件
- 21. 運行在關閉瀏覽器
- 22. 關閉瀏覽器(PHP)
- 23. 瀏覽器關閉時服務器是否「關閉」? PHP - MYSQL
- 24. 是否有可能在瀏覽器中運行Shell腳本
- 25. 如果用戶不正確關閉瀏覽器(即時瀏覽器終止)
- 26. 如果用戶關閉瀏覽器,運行函數
- 27. HTML5中的離線webapps - 關閉瀏覽器後繼續?
- 28. 瀏覽器關閉後繼續CakePHP會話
- 29. 即使瀏覽器關閉後,是否可以保持會話?
- 30. 當我關閉瀏覽器時,PHP腳本會終止嗎?
因此,如果我想解除執行作業的瀏覽器請求,我如何請求另一個php腳本,同時用戶的當前請求繼續正常。 因此,當用戶請求任何網址時,此請求將啓動另一個腳本(獨立於用戶瀏覽器和其他請求工作)。用戶將繼續在網站上正常衝浪 – 2009-11-01 22:09:04
好問題兄弟! +1 – 2011-08-31 06:01:27