我想知道 - 因爲我寫了一段代碼,可以更新多達10,000行,並可能需要幾秒鐘才能完成,如果通過ajax請求訪問文件時,發送查詢發送到PHP文件,然後關閉瀏覽器,文件得到完全執行?假設完成請求大約需要25秒,用戶可能不會等待25秒,足以「ping」這個文件並讓用戶在mysql查詢發生時瀏覽或關閉其瀏覽器窗口?瀏覽器關閉時服務器是否「關閉」? PHP - MYSQL
回答
一旦關閉瀏覽器,它就會在獲得答覆之前斷開與服務器的連接。我不知道在這種情況下服務器有多不同,但我認爲大多數服務器會中止正在處理的線程來回復請求。
此外,事情可能會因不同的操作而不同 - 即文件I/O或數據庫操作。如果它是一個原子數據庫操作,我的假設是,它會完成任何操作。
但OP沒有要求假設(並且您知道他們[對他們說](http://www.youtube.com/看?v = wg4trPZFUwc))。請參考手冊,不要猜測。 – CodeCaster
該請求具有3份
- 連接到網絡服務器,它是由查詢在DB服務器運行的服務器
- 執行
- PHP腳本瀏覽器
當你關閉瀏覽器,關閉與服務器的連接。服務器可能會或可能不會終止已啓動的PHP腳本(如果PHP作爲apache模塊運行,它將被終止,除非調用ignore_user_abort)。此外,Web服務器可能會有請求的時間限制,並殺死腳本或僅向客戶端發送連接超時消息,而不會終止腳本,但不會讓其有機會向瀏覽器發送任何內容。
這是一個棘手的部分 - 更新在數據庫中運行,它不會被Web服務器殺死,也不會被PHP殺死。
所以你想要實現的是ping一個PHP腳本,即執行查詢,但客戶端不會等待結果。您可能希望或不希望查詢本身是異步的(PHP腳本不要等待查詢),但是您必須告訴客戶端請求已完成,例如通過發送內容長度爲0,並刷新輸出(實際上是http頭文件),並使用ignore_user_abort運行PHP,以便繼續執行。
使用ignore-user-abort繼續運行該客戶端已斷開,即使腳本
ignore_user_abort(true);
set_time_limit(0);
您可以使用connection_status跟蹤如果連接已經斷開
if (connection_status()!=0) { //connection disconnected
通常不會,但您的腳本通過ABORTED
狀態。
更多細節在手冊中有關連接處理: http://www.php.net/manual/en/features.connection-handling.php
在PHP內部,連接狀態得以維持。有3種 可能的狀態:
0 - 師範大學
1 - 中止
2 - TIMEOUT
當PHP腳本運行正常正常狀態時,是有效的。如果 遠程客戶端斷開連接,ABORTED狀態標誌打開。 A 遠程客戶端斷開連接通常是由用戶點擊其「停止」按鈕導致的。
- 1. 關閉瀏覽器(PHP)
- 2. 關閉瀏覽器
- 3. 檢查瀏覽器是否已關閉
- 4. 如何在關閉瀏覽器窗口時關閉本地tomcat服務器?
- 5. 如果用戶關閉瀏覽器,WCF服務是否工作
- 6. 檢測用戶瀏覽器是否關閉瀏覽器
- 7. 在瀏覽器關閉
- 8. 調用PHP時,瀏覽器或瀏覽器選項卡關閉
- 9. 瀏覽器關閉時運行服務器端函數
- 10. 關閉彈出窗口關閉直到瀏覽器關閉
- 11. 鉻:當瀏覽器關閉
- 12. 餅乾關閉瀏覽器
- 13. 關閉瀏覽器警報
- 14. SetTimeout在瀏覽器關閉
- 15. 在瀏覽器關閉
- 16. 關閉瀏覽器事件
- 17. 使Web瀏覽器關閉
- 18. 瀏覽器關閉事件
- 19. 瀏覽器關閉和asp.net
- 20. XPages關閉瀏覽器
- 21. 檢查websocket服務器是否關閉
- 22. MacPorts的服務器是否關閉?
- 23. 關於瀏覽器關閉事件
- 24. 關閉瀏覽器清除PHP會話
- 25. PHP ob_end_flush()不關閉瀏覽器連接
- 26. PHP會議上就關閉瀏覽器
- 27. 瀏覽器關閉時會話cookie是否過期?
- 28. 關閉瀏覽器或標籤時關閉Asp.Net會話
- 29. Spring Roo - 在瀏覽器關閉時關閉會話
- 30. GWT:如何在關閉瀏覽器時關閉會話
只是一個猜測,但我會說,一旦命令發送,瀏覽器的工作就完成了。熟悉打印工作可能:您可以關閉圖片,打印圖片 – Sprottenwels