2016-01-22 52 views
1

我正在使用使用PHP和JavaScript的SSE。爲什麼打印數據時,php會在客戶端斷開連接時中止,但是否則不會中斷?

我有一個循環(使用壽命爲15秒,用於開發目的),並且添加了「啓動連接」,「仍在此處」(睡眠1秒後)和「結束連接」數據庫用於調試目的。

我發現當php腳本運行時沒有「print」ing /「echo」ing /「var_dump()」任何信息時,無論客戶端是否運行,腳本(讀取「loop」已經終止連接或沒有。

但是,當我打印/ echo/var_dump什麼 - 腳本終止,只要用戶終止。

爲什麼存在這種差異?

+0

默認情況下,腳本應在客戶端斷開連接時中止。如果您在'php.ini'中設置了'ignore_user_abort'選項,則會禁用此選項。參見http://php.net/manual/en/features.connection-handling.php。 – Barmar

+0

'ignore_user_abort'沒有在我的'php.ini'中設置,但是當你有一個循環運行時,循環不會在用戶斷開連接後結束。 (除非你打印/回顯/轉儲輸出)。 –

回答

0

正常情況下,應在客戶端斷開連接時中止腳本。有幾個方面,這可以覆蓋:

  • 坐落在php.iniignore_user_abort選項。
  • httpd.conf中設置php_value ignore_user_abort選項。
  • 在PHP腳本中調用ignore_user_abort()
  • 在PHP腳本中使用register_shutdown_function()註冊關閉功能。
+0

這些東西都沒有在我的腳本/服務器設置中完成 - 但是如果php文件有循環,並且使用'print'' echo'等不輸出任何東西,則使用JavaScript中的SSE調用php文件。它會保留在用戶斷開連接後運行。 –

+0

我對SSE並不是很熟悉。也許這不會像正常下載網頁一樣管理客戶端的連接,因此不會類似地檢測到斷開連接。 – Barmar

+0

另外,你是否需要對PHP腳本進行不同的編程? – Barmar

相關問題