【问题标题】:remove directory structure when zipping files in PHP在 PHP 中压缩文件时删除目录结构
【发布时间】:2011-07-10 19:27:35
【问题描述】:

我在 PHP 中压缩文件时遇到了一些问题。我有一个压缩文件数组的函数,这些文件都在不同的目录中。函数看起来像:

function create_zip($files = array(),$destination = '',$overwrite = false,$add_to_db=true) {
    print_r($files);
        $zip = new ZipArchive();
        if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
            return false;
        }
        for($i=0;$i < count($files); $i++) {
            //echo $files[$i].'<br>';
            $zip->addFile($files[$i],$files[$i]);
        }



        $zip->close();

        if(file_exists($destination)) {
       //  echo("Success");
       if($add_to_db == true) { add_file($destination); }

            return true;

        } else {
        //echo("Failed");
           return false;
        }
    }

当用户下载并解压 zip 文件时,文件结构如下:

folder/folder2/file1.jpg
folder/file2.jpg
folder/folder2/folder3/file3.jpg

我的问题是,是否可以让 PHP 将所有文件放在 zip 的根目录中并忽略给定的结构。所以提取的文件看起来像:

/file1.jpg
/file2.jpg
/file3.jpg

我能想到的唯一解决方案是将所有文件移动到一个文件夹中,然后压缩该文件夹,但这似乎有点过头了。

【问题讨论】:

    标签: php directory zip


    【解决方案1】:

    addFile() 的第二个参数指定一个文件名(无路径):

    $zip->addFile( $files[$i], basename($files[$i]) );
    

    https://www.php.net/manual/en/ziparchive.addfile.php

    请注意,如果您尝试添加多个具有相同基本名称的文件(例如 folder1/foo.jpgfolder2/foo.jpg),您将覆盖第一个文件,并且只有第二个文件最终会出现在 zip 文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 2020-05-23
      相关资源
      最近更新 更多