2012-02-14 6 views
3

私は、変更(新しいファイル、変更、削除)のフォルダとそのサブフォルダを見て、アクションを実行する簡単なPHPスクリプトを書いています。PHPのフォルダウォッチウィンドウで

php -f script.phpを使用して、このスクリプトをWindowsのコマンドラインから実行します。

PHPバインディングを持つウィンドウでフォルダを監視する方法を探しています。窓のためのinotifyかgaminのような何かがいいでしょう。

this questionの回答にはFindFirstChangeNotificationが記載されていますが、PHPバインディングが見つかりませんでした。

PHPバインディングのあるウィンドウでフォルダ/ファイルシステムを監視するライブラリ/ソフトウェアはありますか?

答えて

1

私は、無限ループで呼び出されるRecursiveDirectoryIteratorを使って単純な関数を書いただけです。

私がしなければならないのは、ファイルまたはフォルダの最終更新時刻をチェックして、trueまたはfalseを返すことだけです。

これは非常に正確なアプローチではありませんが、私の目的を十分に満たしています。バックグラウンドに座って、スクリプトは約12MBのRAMを使います。

0

あなたはRubyはあなたはそれが何watchr gem

を使用することができ、サーバーにインストールしている場合は火災/ディレクトリの変更時に、それはあなたがやろうとしている正確に何であるあなたによって定義されたスクリプトを実行し、非常に簡単です。だから、これはすべてのPHPやその他の拡張ファイルと一致し、ファイル名に対して正規表現を実行して、/プロジェクト/テスト/のような一致があるかどうウィル

#!/usr/bin/ruby 

# Match all PHP files in your project directory 
watch("<PROJECT_DIR_PATH>/(.*).<FILE_EXTENSION_PHP>") do |match| 
    run_test %{<PROJECT_DIR_PATH>/Tests/#{match[1]}Test.php} 
end 

# Match all files in your Tests directory 
watch("<PROJECT_DIR_PATH>/Tests/.*Test.php") do |match| 
    run_test match[0] 
end 

# Run test if there are matches 
def run_test(file) 
    unless File.exist?(file) 
    puts "#{file} does not exist" 
    return 
    end 

    puts "Running #{file}" 
    result = `phpunit #{file}` 
    puts result 
end 

:ここ

は、サンプルファイルautotest.rbですClassNameTest.phpテストを実行します。それ以外の場合は、マッサージを終了してください。便宜上、エラー時に電子メールをあらかじめ定義されたリスト電子メールに送信するように設定できます。

1

inotify_add_watch PHP関数を使用すると、指定したディレクトリ内の変更(新しいファイル、変更、削除)の通知を受け取ることができます。 WindowsではFileSystemWatcherと同じ方法で動作します。