php创建zip,比较方便的方法是使用ZipArchive扩展
public function addFileToZip($path,$zip,$order_id){
$handler = opendir($path);
while(($filename = readdir($handler)) !== false){
if($filename != "." && $filename != ".."){
if(is_dir($path."/".$filename)){
$this->addFileToZip($path."/".$filename, $zip,$order_id);
}else{
$fullName = $path."/".$filename;
$pathObj = explode($order_id,$fullName);
$zip->addFile($path."/".$filename,$order_id.$pathObj[1]);
}
}
}
@closedir($path);
}
$zip=new ZipArchive();
$order_id = "zid452187f4";
$tmpFolder = "E:/work/item/zip/zid452187f4";
if($zip->open($tmpFolder.'.zip', ZipArchive::OVERWRITE) === TRUE){
addFileToZip($dollTmpFolder, $zip,$order_id);
$zip->close();
}
这里假如直接使用方法$zip->addFile($file)的话,如果要压缩的文件夹目录层次很深,会在zip文件中包含这些层级目录
这里我们可以使用$order_id的值来做为压缩文件的顶级目录,从而排除$order_id的上级文件夹,这个$order_id的值可以是路径中的任何一级
$pathObj = explode($order_id,$fullName);
$zip->addFile($path."/".$filename,$order_id.$pathObj[1]);