拡張モジュールinotify追加 ( ファイルシステム監視)

linux2.6カーネルには、ディレクトリやファイルを監視する機能がサポートされており、phpでは、これをAPI化したextensionが用意されている。たとえば、サーバ側でファイルのアップロードリクエスト処理とは別のセッションで、ファイルを監視し、変換処理などを行えないか検討したときのメモ。

拡張モジュールのソースコードをサイトからダウンロードする。phpizeconfigureスクリプトを生成し、makeおよびインストールを行う。
ちなみに、phpizeはphpモジュールと同じbinディレクトリに入っているユーティリティツールである。

> wget http://pecl.php.net/get/inotify-0.1.6.tgz
> cd inotify-0.1.6
> phpize
> ./configure --with-php-config=/usr/local/php/current/bin/php-config
:
> make
:
> sudo make install
:
Installing shared extensions: /usr/local/.../no-debug-non-zts-20121212/

php.iniのextension_dirに設定されているディレクトリへコピーする

> sudo cp /usr/local/.../no-debug-non-zts-20121212/inotify.so /usr/local/php/current/ext/

php.iniにビルドしたinotify.soをロードするように修正を加える。 (extension=がたくさん記述されている項に追加)

extension=inotify.so

apache2を再起動する

# sudo service apache2 stop
# sudo service apache2 start

inotifyのソースディレクトリ内にあるtail.phpを使って動作確認を行う。正常に動作すると、監視しているファイルの書き込みが標準出力される。

# php tail.php sample.txt

別のコンソールからsample.txtに書き込み

# echo hello >> sample.txt

別のコンソールからsample.txtに書き込み

# hp tail.php sample.txt Event received ! hello

これで正しくinotifyモジュールがビルドされて、php環境にロードされたことが確認できる。