2013-03-15 47 views
1

我有一個PHP腳本配置爲無限循環使用set_time_limit(0)for(;;)。腳本編碼爲偵聽特定目錄並等待文件。當檢測到文件時,執行一些命令並繼續循環。到目前爲止,這對我的需求非常成功,但我擔心。PHP腳本監聽某個目錄

是否有任何性能缺點PHP創建一個無限循環? 如何配置我的服務器以便該腳本永不停止運行?或者可能在它停止運行時提醒我?我希望它也能在啓動時啓動。我有一個SUSE SLES 10盒。

for (;;) { 
    // Check for empty directory 
    if (isEmptyDir($finishedDir)) {   
     // If so, move on 
     continue; 
    } else { 
     // do stuff. 
    } 
} 
+1

runnin無限循環沒有問題。只記得偶爾睡一次,否則劇本會吃早餐的CPU週期。 – h2ooooooo 2013-03-15 19:31:10

+0

你可以使用'cron'。 – 2013-03-15 19:50:25

+0

好吧。我在'do stuff'部分使用sleep(),但只有在實際檢測到文件時纔會發生。我應該在每個循環結束時使用sleep(),無論是否找到文件? – Darius 2013-03-15 19:59:51

回答

1

這可以工作,但PHP是不是真的專爲這些類型的守護樣工作的。 Linux/Unix有定製的工具,如inotify,這些工具保證性能更好,並且在發生更改事件時可以觸發PHP腳本。

見這太問題:Monitor Directory for Changes

+1

++ PHP有一個Inotify擴展。 – cdarke 2013-03-15 20:17:06

0

您可以考慮使用存儲器(例如:memcached的,APC)而不是使用文件,因爲訪問一個文件是不是訪問內存更昂貴。並考慮使用一點點sleep() s來增加時間間隔。