检查用户是否有压缩文件夹或文件

时间:2014-09-21 13:06:34

标签: php

我有一个允许用户上传ZIP文件夹的脚本。有些用户选择单个文件,然后将其压缩,以便在解压缩时有多个文件,但有些ZIP整个文件夹,所以当它们未压缩时,你只需要一个文件夹。

我想要做的是检查解压缩文件夹的唯一内容是否是另一个文件夹,如果是,则将该文件夹中的所有文件向下移动到上一个文件夹中,然后删除原始文件夹。

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

换句话说,您想要展平zip存档的目录结构。有很多方法可以做到这一点。

解压缩,然后展平文件夹结构

一种方法是解压缩zip存档,然后使用DirectoryIterator来处理文件和文件夹。 如果检测到文件夹,则将其文件内容移动/复制到提取目录,然后删除该文件夹。这会使文件夹上的每次迭代都会使dir结构变平。

https://stackoverflow.com/a/17087268/1163786

ZipArchive - 无文件夹解压缩

另一种方法是解压缩zip存档,而不必关心存储在其中的路径,如下所示:

$path = 'zipfile.zip'  

$zip = new ZipArchive;

if ($zip->open($path) === true) {
    for($i = 0; $i < $zip->numFiles; $i++) {
        $filename = $zip->getNameIndex($i);
        $fileinfo = pathinfo($filename);
        copy("zip://".$path."#".$filename, "/your/new/destination/".$fileinfo['basename']);
    }                   
    $zip->close();                   
}

unzip -j或7z -e

最后,它被标记为PHP问题,但是: 如果在CLI上使用unzip,请使用-j选项。 Ìt代表“垃圾路径”,这意味着当解压缩并且所有文件都存储在提取目录中时(默认情况下,当前的文件),不会重新创建存档的目录结构。

ex(忽略路径),而不是7z(带完整路径)。 http://sevenzip.sourceforge.jp/chm/cmdline/commands/extract.htm