PHP多个图片压缩成ZIP的方法
本文实例为大家分享了PHP多个图片压缩成ZIP的具体代码,供大家参考,具体内容如下
可将多个文件压缩成一个zip压缩包,文件名可自定义(兼容中文文件名)
>1);
}
functionadd_file($data,$name,$time=0){
$name=urldecode($name);
//判断文件名中是否含有中文
if(preg_match("/[\x7f-\xff]/",$name)){
$name=$this->iconv_to_utf8($name,'GB2312');
}
$name=str_replace('\\','/',$name);
$dtime=dechex($this->unix2_dostime($time));
$hexdtime='\x'.$dtime[6].$dtime[7].'\x'.$dtime[4].$dtime[5].'\x'.$dtime[2].$dtime[3].'\x'.$dtime[0].$dtime[1];
eval('$hexdtime="'.$hexdtime.'";');
$fr="\x50\x4b\x03\x04";
$fr.="\x14\x00";
$fr.="\x00\x00";
$fr.="\x08\x00";
$fr.=$hexdtime;
$unc_len=strlen($data);
$crc=crc32($data);
$zdata=gzcompress($data);
$zdata=substr(substr($zdata,0,strlen($zdata)-4),2);
$c_len=strlen($zdata);
$fr.=pack('V',$crc);
$fr.=pack('V',$c_len);
$fr.=pack('V',$unc_len);
$fr.=pack('v',strlen($name));
$fr.=pack('v',0);
$fr.=$name;
$fr.=$zdata;
$fr.=pack('V',$crc);
$fr.=pack('V',$c_len);
$fr.=pack('V',$unc_len);
$this->datasec[]=$fr;
$cdrec="\x50\x4b\x01\x02";
$cdrec.="\x00\x00";
$cdrec.="\x14\x00";
$cdrec.="\x00\x00";
$cdrec.="\x08\x00";
$cdrec.=$hexdtime;
$cdrec.=pack('V',$crc);
$cdrec.=pack('V',$c_len);
$cdrec.=pack('V',$unc_len);
$cdrec.=pack('v',strlen($name));
$cdrec.=pack('v',0);
$cdrec.=pack('v',0);
$cdrec.=pack('v',0);
$cdrec.=pack('v',0);
$cdrec.=pack('V',32);
$cdrec.=pack('V',$this->old_offset);
$this->old_offset+=strlen($fr);
$cdrec.=$name;
$this->ctrl_dir[]=$cdrec;
}
functionadd_path($path,$l=0){
$d=@opendir($path);
$l=$l>0?$l:strlen($path)+1;
while($v=@readdir($d)){
if($v=='.'||$v=='..'){
continue;
}
$v=$path.'/'.$v;
if(is_dir($v)){
$this->add_path($v,$l);
}else{
$this->add_file(file_get_contents($v),substr($v,$l));
}
}
}
functionfile(){
$data=implode('',$this->datasec);
$ctrldir=implode('',$this->ctrl_dir);
return$data.$ctrldir.$this->eof_ctrl_dir.pack('v',sizeof($this->ctrl_dir)).pack('v',sizeof($this->ctrl_dir)).pack('V',strlen($ctrldir)).pack('V',strlen($data))."\x00\x00";
}
functionadd_files($files){
foreach($filesas$file){
if(is_file($file)){
$data=implode("",file($file));
$this->add_file($data,$file);
}
}
}
functionoutput($file){
$fp=fopen($file,"w");
fwrite($fp,$this->file());
fclose($fp);
}
/**
*转码为UTF-8
*@param$keyword要转码的字符串
*/
functioniconv_to_utf8($keyword,$to='UTF-8'){
$encode=mb_detect_encoding($keyword,array('ASCII','UTF-8','GBK','GB2312'));
if($encode!=$to){
$keyword=iconv($encode,$to,$keyword);
}
return$keyword;
}
}
$dfile=tempnam('/tmp','tmp');//产生一个临时文件,用于缓存下载文件
$zip=newzipfile();
//----------------------
$filename='image.zip';//下载的默认文件名
$filename=$filename;
$host='http://test.love11.com';
//$dir_name=$host.'/images/point_qrcode/';
$image=array(
array('image_src'=>'test2.jpg','image_name'=>'中文1.jpg'),
array('image_src'=>'weixin.jpg','image_name'=>'中文2.jpg'),
);
foreach($imageas$v){
$zip->add_file(file_get_contents($dir_name.urlencode($v['image_src'])),$v['image_name']);
//添加打包的图片,第一个参数是图片内容,第二个参数是压缩包里面的显示的名称,可包含路径
//或是想打包整个目录用$zip->add_path($image_path);
}
//----------------------
$zip->output($dfile);
//下载文件
ob_clean();
header('Pragma:public');
header('Last-Modified:'.gmdate('D,dMYH:i:s').'GMT');
header('Cache-Control:no-store,no-cache,must-revalidate');
header('Cache-Control:pre-check=0,post-check=0,max-age=0');
header('Content-Transfer-Encoding:binary');
header('Content-Encoding:none');
header('Content-type:multipart/form-data');
header('Content-Disposition:attachment;filename="'.$filename.'"');//设置下载的默认文件名
header('Content-length:'.filesize($dfile));
$fp=fopen($dfile,'r');
while(connection_status()==0&&$buf=@fread($fp,8192)){
echo$buf;
}
fclose($fp);
@unlink($dfile);
@flush();
@ob_flush();
exit();
?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。