有没有办法在windows和linux上使用php检测文件夹中的变化?

Ert*_*unç 6 php directory shell notifications multiplatform

我正在寻找一种使用php检测文件夹更改的解决方案。该应用程序可以在两个平台(linuxwindows)上运行。只要结果相同,我可能会为每个平台使用不同的方法。我想要的是:

  1. 如果将文件/文件夹添加到目录中,我希望我的应用程序检测到这个新文件并读取其属性(size,filetime等)
  2. 如果保存现有文件/文件夹/更改/删除内容,我需要检测此文件已更改
  3. 如果我可以监视apache 的webroot 之外的基本文件夹(例如c:\tmp, 或d:\music在 windows 或/home/ertunclinux 上)会更好

我阅读了一些内容,inotify但我不确定它是否满足我的需求。

Jon*_*lor 2

因此,如果您要与上次检查时进行比较,而不是在更改后立即更新,您可以执行以下操作。

您可以创建一个目录的 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));
}
Run Code Online (Sandbox Code Playgroud)

但这效率相当低,因为您可能知道,如果第一位不同,则没有必要检查目录的全部内容。