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); }
繁星coding
TA贡献1797条经验 获得超4个赞
兄弟,不知道你解决了没有,,我也和你一样的问题,,我也不知道怎么解决?我最后解决了使用zip下的renameName,在$zip->addFile($path.$filename);后面再加入一个函数就行了$zip->renameName($path.$filename,$filename);就不会出现多级目录了.
添加回答
举报
0/150
提交
取消