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程序设计有所帮助。