我想運行一個PHP腳本while(true){ }
。帶死PHP腳本
它會得到它已經被其他發給我時,並回答他們。(像雅虎機器人)
現在如果我設置set_time_limit(0)
和使用while(true)
和我的服務器http://ip-address/yahoo.php
上運行此頁面並關閉瀏覽器它是否永遠運行?
我想運行一個PHP腳本while(true){ }
。帶死PHP腳本
它會得到它已經被其他發給我時,並回答他們。(像雅虎機器人)
現在如果我設置set_time_limit(0)
和使用while(true)
和我的服務器http://ip-address/yahoo.php
上運行此頁面並關閉瀏覽器它是否永遠運行?
ignore_user_abort - 設置客戶端斷開連接是否應該中止腳本執行
錯誤。它在web服務器中也可以工作。嘗試一個簡單的'ignore_user_abort(true);睡眠(20); error_log(「仍然活着」);用你的瀏覽器命中的腳本,在睡眠活動時放棄連接。你將在php錯誤日誌中結束「仍然活着」。如果腳本在終止連接時終止,則不會發生這種情況。 –
在這種情況下,我的評論中顯然是錯誤的(我爲此刪除了它),對不起:) – hoppa
但是,這在許多配置中都會從Web服務器中啓動一個進程(特別是在最常見的Apache + mpm_prefork + mod_php配置)。考慮將腳本作爲cronjob或終端運行。 –
不,它不會永久運行,腳本一旦關閉瀏覽器就會終止。你的整個方法是錯誤的,你創建一個在後臺運行的守護進程監聽一個套接字,它不會在while(true)時運行,因爲這是CPU週期浪費,這是一個巨大的問題。
關於websockets和node.js的研究,聽起來像你需要類似於已經創建的東西。
這是不是一個好主意,這樣做,不應該工作。 你最好從shell和背景中運行腳本,或者在屏幕上運行腳本。
嘗試php cli,所以你可以在你的命令行上運行php。 比你可以創建一個Bash文件啓動它,所以腳本將運行「永遠」。
但是,如果你通過瀏覽器啓動它,它將不會永遠運行。
你應該考慮爲這樣的腳本設置一個cronjob。 – JJJ
@Juhana - 確切地說,我同意。每5秒運行一次可以快速響應並節省大量浪費的處理。 –
除了cron的粒度爲1分鐘。您仍然需要某種腳本循環來執行5秒的延遲。 –