PHP实现打包下载文件的方法示例
本文实例讲述了PHP实现打包下载文件的方法。分享给大家供大家参考,具体如下:
/** *下载文件 *@param$img *@returnstring */ publicfunctionDownload($img) { $items=[]; $names=[]; if($img) { //用于前端跳转zip链接拼接 $path_redirect='/zip/'.date('Ymd'); //临时文件存储地址 $path='/tmp'.$path_redirect; if(!is_dir($path)) { mkdir($path,0777,true); } foreach($imgas$key=>$value){ $fileContent=''; $fileContent=$this->CurlDownload($value['url']); if($fileContent) { $__tmp=$this->SaveFile($value['url'],$path,$fileContent); $items[]=$__tmp[0]; $names[]=$value['name'].'_'.($key+1).'.'.$__tmp[1]; } } if($items) { $zip=newZipArchive(); $filename=time().'download.zip'; $zipname=$path.'/'.$filename; if(!file_exists($zipname)){ $res=$zip->open($zipname,ZipArchive::CREATE|ZipArchive::OVERWRITE); if($res){ foreach($itemsas$k=>$v){ $value=explode("/",$v); $end=end($value); $zip->addFile($v,$end); $zip->renameName($end,$names[$k]); } $zip->close(); }else{ return''; } //通过前端js跳转zip地址下载,让不使用php代码下载zip文件 //if(file_exists($zipname)){ //拼接附件地址 //$redirect=域名.$path_redirect.'/'.$filename; //return$redirect; //header("Location:".$redirect); //} //直接写文件的方式下载到客户端 if(file_exists($zipname)){ header("Cache-Control:public"); header("Content-Description:FileTransfer"); header('Content-disposition:attachment;filename=附件.zip');//文件名 header("Content-Type:application/zip");//zip格式的 header("Content-Transfer-Encoding:binary");//告诉浏览器,这是二进制文件 header('Content-Length:'.filesize($zipname));//告诉浏览器,文件大小 @readfile($zipname); } //删除临时文件 @unlink($zipname); } } return''; } } /** *curl获取链接内容 *@param$url *@returnmixed|string */ publicfunctionCurlDownload($url){ $ch=curl_init($url); curl_setopt($ch,CURLOPT_IPRESOLVE,CURL_IPRESOLVE_V4); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_HEADER,0); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); $errno=curl_errno($ch); $error=curl_error($ch); $res=curl_exec($ch); curl_close($ch); if($errno>0){ return''; } return$res; } /** *保存临时文件 *@param$url *@param$dir *@param$content *@returnarray */ publicfunctionSaveFile($url,$dir,$content) { $fname=basename($url);//返回路径中的文件名部分 $str_name=pathinfo($fname);//以数组的形式返回文件路径的信息 $extname=strtolower($str_name['extension']);//把扩展名转换成小写 $path=$dir.'/'.md5($url).$extname; $fp=fopen($path,'w+'); fwrite($fp,$content); fclose($fp); returnarray($path,$extname); }
引用:
$img=[['url'=>'地址url/1.jpg','name'=>'名字']]; Download($img);
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP操作zip文件及压缩技巧总结》、《php文件操作总结》、《php正则表达式用法总结》、《PHP运算与运算符用法总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。