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
提交
取消
