php使用inotify實現隊列處理
參考以下文章:
http://blog.jiunile.com/php%E4%BD%BF%E7%94%A8inotify%E5%AE%9E%E7%8E%B0%E9%98%9F%E5%88%97%E5%A4%84%E7%90%86.html
http://sexywp.com/use-inotify-to-monitor-file-system.htm
上面的我已經測試,確實是正確的。
php
首先,咱們須要達成如下一些共識:html
下載inotify (http://pecl.php.net/package/inotify),解壓並安裝:linux
1
2
3
4
5
|
tar -xvf inotify-0.1.6.tgz
cd inotify-0.1.6
/usr/local/php5/bin/phpize
./configure --with-php-config=/usr/local/php5/bin/php-config
make && make install
|
接着在php.ini文件中加載inotify.so,查看有沒有加載成功可經過php -i|grep inotify查看。web
接着在/dev/shm創建內存目錄,由於隊列的處理是須要較高的速度,放到磁盤會有必定的I/O時間消耗,咱們創建/dev/shm/inotify目錄,而後用php寫一個死循環的demo去監控目錄,另外,經過變動/dev/shm/inotify目錄的文件或屬性查看結果:數組
01
02
03
04
05
06
07
08
09
10
11
12
|
<?php
$notify
= inotify_init();
$rs
= inotify_add_watch(
$notify
,
'/dev/shm/inotify'
, IN_CREATE);
//IN_CREATE表示只監控新文件的創建,具體參數列表能夠在手冊inotify處找到。
if
(!
$rs
){
die
(
'fail to watch /dev/shm/inotify'
);
}
while
(1){
$files
= inotify_read(
$notify
);
print_r(
$files
);
echo
'continue to process next event'
;
}
|
使用inotify模塊比不斷地循環和scan目錄要靈活且省資源,在inotify_read處,沒有收到任何事件以前是會一直阻塞的,因此這裏的while就不存在有沒有操做都須要循環執行。cookie
嘗試在/dev/shm/inotify創建一個test.txt的新文件,會在inotify_read返回一個包含全部文件的數組,如:ide
01
02
03
04
05
06
07
08
09
10
|
Array
(
[0] => Array
(
[wd] => 1
[mask] => 256
[cookie] => 0
[name] => test.txt
)
)
|