首先,我們需要達成以下一些共識:
/dev/shm 為linux下的記憶體目錄,顯然在這個目錄下建立的東西會放在記憶體中,預設可以使用50%的記憶體,在記憶體不足時,可通過swap進行切換到磁碟。
inotify是linux下的檔案系統事件監控,可以滿足各種檔案監控需要,提供了諸如inotify_init,inotify_read等介面,需要linux2.6或以上的核心(uname -a查看),cygwin下好像不能實現。
php預設是不提供支援inotify的擴充,所以我們需要通過pecl下載編譯安裝。
下載inotify (http://pecl.php.net/package/inotify),解壓並安裝:
tar -xvf inotify-0.1.6.tgzcd inotify-0.1.6/usr/local/php/bin/phpize./configure --with-php-config=/usr/local/php/bin/php-configmake && make install
接著在php.ini檔案中載入inotify.so,查看有沒有載入成功可通過php -i|grep inotify查看。
接著在/dev/shm建立記憶體目錄,因為隊列的處理是需要較高的速度,放到磁碟會有一定的I/O時間消耗,我們建立/dev/shm/inotify目錄,然後用php寫一個死迴圈的demo去監控目錄,另外,通過變更/dev/shm/inotify目錄的檔案或屬性查看結果:
使用inotify模組比不斷地迴圈和scan目錄要靈活且省資源,在inotify_read處,沒有收到任何事件之前是會一直阻塞的,所以這裡的while就不存在有沒有操作都需要迴圈執行。
嘗試在/dev/shm/inotify建立一個test.txt的新檔案,會在inotify_read返回一個包含所有檔案的數組,如:
Array( [0] => Array ( [wd] => 1 [mask] => 256 [cookie] => 0 [name] => test.txt ))