如何使用array_intersect查找相同的文件?
How to use array_intersect to find the same files?
我在删除两个不同文件夹中的两个文件(都具有相同的文件名)时遇到问题。我尝试使用取消链接功能进行删除。如何使用 PHP 取消链接功能删除这两个不同文件夹中的这两个文件?
任何人都可以指导我如何使用 array_intersect
查找文件,将它们推送到数组中,然后 运行 在该数组上进行 foreach 循环以使用 unlink 删除?
下面是我的代码:
<?php
$i = 1;
$files = scandir("upload_dms_file/uploads_meeting_document");
$files_2 = scandir("upload_dms_file/uploads_filing_file");
$date = $files[$a];
for ($a = 2; $a < count($files); $a++) {
?>
<tr>
<td> <?php echo $i++; ?></td>
<td> <a href="upload_dms_file/uploads_meeting_document/<?php echo $files[$a]; ?>" target="_blank"> <?php echo $files[$a]; ?></a></td>
<td>
<button class="btn btn-sm btn-primary"><a href="upload_dms_file/uploads_meeting_document/<?php echo $files[$a]; ?>"
download="<?php echo $files[$a]; ?>" style="color: white;">
Download</a></button>
   
<button class="btn btn-sm btn-primary"><a
href="upload_dms_file/delete_meeting_document.php?name=uploads_meeting_document/<?php echo $files[$a]; ?>" style="color: white;">
Delete
</a></button>
</td>
</tr>
<?php
} ?>
下面是我的删除代码,它成功删除了uploads_meeting_document文件夹中的文件,所以我的问题是如何删除位于uploads_filing_file中的文件的另一个副本(变量是$ files_2) 文件夹?
<?php
unlink($_GET["name"]);
// Redirecting back
header("Location: " . $_SERVER["HTTP_REFERER"]);
?>
下面是我的输出:
Output1
要比较一个文件是否存在于两个目录中,您需要基本名称。使用 scandir() 不是最好的方法,因为您还会收到无法删除的目录,但您可以尝试使用“.”。并且“..”总是存在(在 *NIX 系统中)。
正确的方法是不将所有内容读入内存的迭代器,这将在非常大的目录上节省速度和内存。
这是一个代码示例,说明如何删除存在于不同位置的文件。
const PATH1 = 'upload_dms_file/uploads_meeting_document/';
const PATH2 = 'upload_dms_file/uploads_filing_file/';
$files1 = getFiles(PATH1);
$files2 = getFiles(PATH2);
$intersects = array_intersect($files1, $files2);
foreach($intersects as $filename) {
deleteFile(PATH1, $filename);
deleteFile(PATH2, $filename);
}
function getFiles(string $path): array
{
$files = [];
$iterator = new DirectoryIterator($path);
foreach ($iterator as $fileInfo) {
if ($fileInfo->isFile()) $files[] = $fileInfo->getFilename();
}
return $files;
}
function deleteFile($path, $filename) {
$fullpath = $path . $filename;
if(file_exists($fullpath)) unlink($fullpath);
}
我在删除两个不同文件夹中的两个文件(都具有相同的文件名)时遇到问题。我尝试使用取消链接功能进行删除。如何使用 PHP 取消链接功能删除这两个不同文件夹中的这两个文件?
任何人都可以指导我如何使用 array_intersect
查找文件,将它们推送到数组中,然后 运行 在该数组上进行 foreach 循环以使用 unlink 删除?
下面是我的代码:
<?php
$i = 1;
$files = scandir("upload_dms_file/uploads_meeting_document");
$files_2 = scandir("upload_dms_file/uploads_filing_file");
$date = $files[$a];
for ($a = 2; $a < count($files); $a++) {
?>
<tr>
<td> <?php echo $i++; ?></td>
<td> <a href="upload_dms_file/uploads_meeting_document/<?php echo $files[$a]; ?>" target="_blank"> <?php echo $files[$a]; ?></a></td>
<td>
<button class="btn btn-sm btn-primary"><a href="upload_dms_file/uploads_meeting_document/<?php echo $files[$a]; ?>"
download="<?php echo $files[$a]; ?>" style="color: white;">
Download</a></button>
   
<button class="btn btn-sm btn-primary"><a
href="upload_dms_file/delete_meeting_document.php?name=uploads_meeting_document/<?php echo $files[$a]; ?>" style="color: white;">
Delete
</a></button>
</td>
</tr>
<?php
} ?>
下面是我的删除代码,它成功删除了uploads_meeting_document文件夹中的文件,所以我的问题是如何删除位于uploads_filing_file中的文件的另一个副本(变量是$ files_2) 文件夹?
<?php
unlink($_GET["name"]);
// Redirecting back
header("Location: " . $_SERVER["HTTP_REFERER"]);
?>
下面是我的输出:
Output1
要比较一个文件是否存在于两个目录中,您需要基本名称。使用 scandir() 不是最好的方法,因为您还会收到无法删除的目录,但您可以尝试使用“.”。并且“..”总是存在(在 *NIX 系统中)。
正确的方法是不将所有内容读入内存的迭代器,这将在非常大的目录上节省速度和内存。
这是一个代码示例,说明如何删除存在于不同位置的文件。
const PATH1 = 'upload_dms_file/uploads_meeting_document/';
const PATH2 = 'upload_dms_file/uploads_filing_file/';
$files1 = getFiles(PATH1);
$files2 = getFiles(PATH2);
$intersects = array_intersect($files1, $files2);
foreach($intersects as $filename) {
deleteFile(PATH1, $filename);
deleteFile(PATH2, $filename);
}
function getFiles(string $path): array
{
$files = [];
$iterator = new DirectoryIterator($path);
foreach ($iterator as $fileInfo) {
if ($fileInfo->isFile()) $files[] = $fileInfo->getFilename();
}
return $files;
}
function deleteFile($path, $filename) {
$fullpath = $path . $filename;
if(file_exists($fullpath)) unlink($fullpath);
}