2013-03-15 87 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来增加时间间隔。