【问题标题】:how to catch file changes in php如何在php中捕获文件更改
【发布时间】:2014-04-17 06:27:53
【问题描述】:

我即将开发一个应用程序,我们可以在其中同步两个文件夹之间的文件更改。

例如:我有一个名为 FOLDER1 的文件夹,我会将 FOLDER1 复制为另一个目录中的 FOLDER2

/var/www/FOLDER1
/var/www/FILE/FOLDER2 (Same content as FOLDER1)

然后我将更改 FOLDER1 中的一些文件,并且我想将这种效果应用于 FOLDER2 也(任何同步方法)。这可能使用 php 吗?

【问题讨论】:

  • 您可以计算文件的 MD5 总和并进行比较。如果它们不同,则将新的复制旧的。

标签: php directory sync


【解决方案1】:

这似乎很复杂。但简单的想法是使用哈希文件。在每个文件中,我们都需要获取该文件的哈希值。我们将在哈希文件更改时同步。我们可以使用 md5() 作为哈希函数。

【讨论】:

  • 我认为他应该在检查md5之前检查修改时间。因为计算很多文件的md5值需要时间。
【解决方案2】:

在伪代码术语中,您可以创建如下所示的算法:

$foldera = getfolderlist('/path/to/folder/a');
$folderb = getfolderlist('/path/to/folder/b');

// same number of files
if (count($foldera) != count($folderb)) {
    sync();
    return;
}


foreach ($foldera as $file) {
    // file in folder a must be in folder b
    if (!in_array($file, $folderb)){
        sync();
        return;
    }

    // if file is different modification time
    if ($folderb[$file->name]->modifytime != $file->modifytime) {
        sync();
        return;
    }

    // if md5 doesnt match
    if (md5(filecontents($folderb[$file->name])) != md5(filecontents($file))) {
        sync();
        return;
    }
}

请记住,这是伪代码,如果直接复制+粘贴,则无法使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 2011-09-10
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多