Php 如何检测不同目录中同名的文件?

Php 如何检测不同目录中同名的文件?,php,Php,假设我的服务器上有2个目录: /xyz/public_html/a/ /xyz/public_html/b/ 它们都由许多文件组成。如何检测两个文件夹在名称和文件扩展名方面共用的文件。这个程序是用PHP实现的。有什么建议吗?使用,您可以这样做 <? $it = new FilesystemIterator('/xyz/public_html/a/'); $commonFiles = array(); foreach ($it as $file) { if ($file-&g

假设我的服务器上有2个目录:

/xyz/public_html/a/
/xyz/public_html/b/
它们都由许多文件组成。如何检测两个文件夹在
名称
文件扩展名
方面共用的文件。这个程序是用PHP实现的。有什么建议吗?

使用,您可以这样做

<?

$it = new FilesystemIterator('/xyz/public_html/a/');

$commonFiles = array();

foreach ($it as $file) {
    if ($file->isDot() || $file->isDir()) continue;

    if (file_exists('/xyz/public_html/b/' . $file->getFilename())) {
        $commonFiles[] = $file->getFilename();
    }
}
使用,您可以执行以下操作

<?

$it = new FilesystemIterator('/xyz/public_html/a/');

$commonFiles = array();

foreach ($it as $file) {
    if ($file->isDot() || $file->isDir()) continue;

    if (file_exists('/xyz/public_html/b/' . $file->getFilename())) {
        $commonFiles[] = $file->getFilename();
    }
}

如果只有两个目录,您可以使用类似于合并算法的算法,其中您有两个已排序项目的列表,并在比较当前项目时同时遍历它们:

$iter1 = new FilesystemIterator('/xyz/public_html/a/');
$iter2 = new FilesystemIterator('/xyz/public_html/b/');
while ($iter1->valid() && $iter2->valid()) {
    $diff = strcmp($iter1->current()->getFilename(), $iter2->current()->getFilename());
    if ($diff === 0) {
        // duplicate found
    } else if ($diff < 0) {
        $iter1->next();
    } else {
        $iter2->next();
    }
}

如果只有两个目录,您可以使用类似于合并算法的算法,其中您有两个已排序项目的列表,并在比较当前项目时同时遍历它们:

$iter1 = new FilesystemIterator('/xyz/public_html/a/');
$iter2 = new FilesystemIterator('/xyz/public_html/b/');
while ($iter1->valid() && $iter2->valid()) {
    $diff = strcmp($iter1->current()->getFilename(), $iter2->current()->getFilename());
    if ($diff === 0) {
        // duplicate found
    } else if ($diff < 0) {
        $iter1->next();
    } else {
        $iter2->next();
    }
}

如果您只想找出哪些是共同点,您可以轻松地使用两次并找到共同点,例如:

//Remove first two elements, which will be the constant . and .. Not a very sexy solution
$filesInA = array_shift(array_shift(scandir('/xyz/publichtml/a/')));
$filesInB = array_shift(array_shift(scandir('/xyz/publichtml/b/')));

$filesInCommon = array_intersect($filesInA, $filesInB);

如果您只想找出哪些是共同点,您可以轻松地使用两次并找到共同点,例如:

//Remove first two elements, which will be the constant . and .. Not a very sexy solution
$filesInA = array_shift(array_shift(scandir('/xyz/publichtml/a/')));
$filesInB = array_shift(array_shift(scandir('/xyz/publichtml/b/')));

$filesInCommon = array_intersect($filesInA, $filesInB);