2011-09-23 44 views
1

我想運行一個PHP腳本while(true){ }帶死PHP腳本

它會得到它已經被其他發給我時,並回答他們。(像雅虎機器人)

現在如果我設置set_time_limit(0)和使用while(true)和我的服務器http://ip-address/yahoo.php上運行此頁面並關閉瀏覽器它是否永遠運行?

+6

你應該考慮爲這樣的腳本設置一個cronjob。 – JJJ

+0

@Juhana - 確切地說,我同意。每5秒運行一次可以快速響應並節省大量浪費的處理。 –

+1

除了cron的粒度爲1分鐘。您仍然需要某種腳本循環來執行5秒的延遲。 –

回答

4

ignore_user_abort(true)可能會做

ignore_user_abort - 設置客戶端斷開連接是否應該中止腳本執行

+1

錯誤。它在web服務器中也可以工作。嘗試一個簡單的'ignore_user_abort(true);睡眠(20); error_log(「仍然活着」);用你的瀏覽器命中的腳本,在睡眠活動時放棄連接。你將在php錯誤日誌中結束「仍然活着」。如果腳本在終止連接時終止,則不會發生這種情況。 –

+0

在這種情況下,我的評論中顯然是錯誤的(我爲此刪除了它),對不起:) – hoppa

+0

但是,這在許多配置中都會從Web服務器中啓動一個進程(特別是在最常見的Apache + mpm_prefork + mod_php配置)。考慮將腳本作爲cronjob或終端運行。 –

1

如果你想有一個腳本來運行永遠在終端運行(或命令提示符)。 如果關閉終端腳本也會停止。

+0

如果您在另一種簡單方式的屏幕中運行腳本來執行後臺操作,則不是。 – 3on

5

不,它不會永久運行,腳本一旦關閉瀏覽器就會終止。你的整個方法是錯誤的,你創建一個在後臺運行的守護進程監聽一個套接字,它不會在while(true)時運行,因爲這是CPU週期浪費,這是一個巨大的問題。

關於websockets和node.js的研究,聽起來像你需要類似於已經創建的東西。

0

不,PHP只在請求時才存在。如果你關閉瀏覽器,請求也會死掉。

[編輯]

正如其他評論者闡明瞭ignore_user_abort功能可以幫助你雖然。

2

這是不是一個好主意,這樣做,不應該工作。 你最好從shell和背景中運行腳本,或者在屏幕上運行腳本。

1

嘗試php cli,所以你可以在你的命令行上運行php。 比你可以創建一個Bash文件啓動它,所以腳本將運行「永遠」。

但是,如果你通過瀏覽器啓動它,它將不會永遠運行。