6

phpを使用してフォルダの変更を検出するための解決策を探しています。アプリケーションは両方のプラットフォーム(LinuxWindows)で実行できます。結果が同じである限り、プラットフォームごとに異なる方法を使用できます。私が望むのは:

  1. ファイル/フォルダーがディレクトリに追加された場合、アプリでこの新しいファイルを検出し、その属性(size,filetimeなど)を読み取ってほしい
  2. 既存のファイル/フォルダが保存/コンテンツが変更/削除された場合、このファイルが変更されたことを検出する必要があります
  3. apacheのwebrootの外にあるベースフォルダー(、、Windows、Linuxなどc:\tmpd:\music/home/ertunc監視できるとよいでしょう。

私は何かを読みましたinotifyが、それが私のニーズを満たしているかどうかはわかりません。

4

3 に答える 3

3

ファイルシステムの変更を監視することは、PHPの外部で解決する必要があるタスクです。このようなことをするために実際に構築されたわけではありません。

両方のプラットフォームに既製のツールがあり、PHPファイルを呼び出してさらに処理を行うことができるファイルの変更を監視できます。

Linuxの場合:

Windowsの場合:

于 2012-10-21T21:29:43.663 に答える
2

したがって、変更されたらすぐに更新されるのではなく、前回チェックしたときと比較してチェックしている場合は、次のようにすることができます。

ディレクトリのMD5を作成し、このMD5を保存してから、新しいMD5を古いMD5と比較して、状況が変わったかどうかを確認できます。

http://php.net/manual/en/function.md5-file.phpから取得した以下の関数は、これを行います。

function MD5_DIR($dir)
{
    if (!is_dir($dir))
    {
        return false;
    }

    $filemd5s = array();
    $d = dir($dir);

    while (false !== ($entry = $d->read()))
    {
        if ($entry != '.' && $entry != '..')
        {
             if (is_dir($dir.'/'.$entry))
             {
                 $filemd5s[] = MD5_DIR($dir.'/'.$entry);
             }
             else
             {
                 $filemd5s[] = md5_file($dir.'/'.$entry);
             }
         }
    }
    $d->close();
    return md5(implode('', $filemd5s));
}

ただし、おそらくご存知のように、最初のビットが異なる場合はディレクトリの内容全体をチェックする意味がないため、これはかなり非効率的です。

于 2012-10-21T21:30:26.480 に答える
1

私は...するだろう

  1. すべてのフォルダ/ファイルをスキャンして、それらの配列を作成します。
  2. これをどこかに保存する
  3. 後でこのスキャンを再度実行します[アレイがまだ同じように見えるかどうかを確認します]。

「時間1」から「今」までのデータ構造全体がわかっているので、何が変わったかがはっきりとわかります。ディレクトリをクロールするには、次を確認してください:http: //www.evoluted.net/thinktank/web-development/php-directory-listing-scriptおよびこのhttp://phpmaster.com/list-files-and-directories- with-php /

于 2012-10-21T21:31:37.540 に答える