为了账号安全,请及时绑定邮箱和手机立即绑定

php ziparchive压缩文件夹时,Zip文件目录结构不对

php ziparchive压缩文件夹时,Zip文件目录结构不对

繁星点点滴滴 2019-05-24 18:20:37
functionaddFileToZip($path,$zip){$handler=opendir($path);while(($filename=readdir($handler))!==false){if($filename!="."&&$filename!=".."){if(is_dir($path."/".$filename)){$this->addFileToZip($path."/".$filename,$zip);}else{//将文件加入zip对象$zip->addFile($path."/".$filename);}}}@closedir($path);}$zip=newZipArchive();if($zip->open("test.zip",ZipArchive::OVERWRITE)===TRUE){addFileToZip("1735",$zip);$zip->close();}1、上面这段代码是吧当前目录下的名为1735的文件夹中的内容压缩到test.php,这时候压缩出来的zip文件的目录结构没有问题2、但当目标文件夹的位置不是在同级目录时,比如addFileToZip("tt/1735",$zip);这时候压缩出来的zip文件的目录结构就多了一层tt文件夹3、Q:有没有办法当目标文件不在同级文件夹时,压缩出来的zip包目录结构也只有一层?
查看完整描述

3 回答

?
慕粉3810592

TA贡献1条经验 获得超1个赞

public function addFileToZip($path, $zip, $sub_dir = ''){
    $handler = opendir($path);
    while (($filename = readdir($handler)) !== false)
    {
        if ($filename != "." && $filename != "..")
        {
            //文件夹文件名字为'.'和‘..’,不要对他们进行操作
            if (is_dir($path . $filename))
            {
                $localPath = $sub_dir.$filename.'/'; //关键在这里,需要加上上一个递归的子目录
                // 如果读取的某个对象是文件夹,则递归
                $this->addFileToZip($path . $filename . '/', $zip, $localPath);
            }
            else
            {
                //将文件加入zip对象
                $zip->addFile($path . $filename, $sub_dir . $filename );
                //$sub_dir . $filename 这个参数是你打包成压缩文件的目录结构,可以调整这里的规则换成你想要存的目录
            }
        }
    }
    @closedir($path);
}
查看完整回答
1 反对 回复 2021-08-18
?
繁星coding

TA贡献1797条经验 获得超4个赞

兄弟,不知道你解决了没有,,我也和你一样的问题,,我也不知道怎么解决?
我最后解决了
使用zip下的renameName,在$zip->addFile($path.$filename);后面再加入一个函数就行了$zip->renameName($path.$filename,$filename);就不会出现多级目录了.
                            
查看完整回答
反对 回复 2019-05-24
?
函数式编程

TA贡献1807条经验 获得超9个赞

你们怎么解决的啊,按照楼上的办法他把我本来压缩文件夹里面的目录结构也都搞没了,如果想保留本来压缩有的结构,去掉他的那些多出来的父结构应该怎么做哦?
                            
查看完整回答
反对 回复 2019-05-24
  • 3 回答
  • 0 关注
  • 2331 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信