本文实例讲述了PHP实现打包下载文件的方法。分享给大家供大家参考,具体如下:

/**

* 下载文件

* @param $img

* @return string

*/

public function Download($img)

{

$items = [];

$names = [];

if($img)

{

//用于前端跳转zip链接拼接

$path_redirect = '/zip/'.date('Ymd');

//临时文件存储地址

$path = '/tmp'.$path_redirect;

if(!is_dir($path))

{

mkdir($path, 0777,true);

}

foreach ($img as $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 = new ZipArchive();

$filename = time().'download.zip';

$zipname = $path.'/'.$filename;

if (!file_exists($zipname)) {

$res = $zip->open($zipname, ZipArchive::CREATE | ZipArchive::OVERWRITE);

if ($res) {

foreach ($items as $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: File Transfer");

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

* @return mixed|string

*/

public function CurlDownload($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

* @return array

*/

public function SaveFile( $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);

return array( $path , $extname) ;

}

引用:

$img = [['url'=>'地址url/1.jpg','name'=>'名字']];

Download($img);

希望本文所述对大家PHP程序设计有所帮助。

php通用下载方法,PHP实现打包下载文件的方法示例相关推荐

  1. python的文件读写方法有哪些_python读写文件的方法有哪些

    python读写文件的方法有哪些 发布时间:2020-08-07 11:58:05 来源:亿速云 阅读:87 作者:小新 这篇文章主要介绍python读写文件的方法有哪些,文中介绍的非常详细,具有一定 ...

  2. 合并下载的Solaris镜像为DVD文件的方法

          有很多朋友想安装solaris10操作系统,但是没有系统盘或者在官方网站下载之后不会合成.经过多次试验之后现在把正确的方法写下,以方便大家的学习之用.       1.先到官方网站下载最新 ...

  3. 【LaTex】利用ins文件和dtx文件生成cls或sty文件,latex宏包的生成与创建方法;配置宏包文件的方法,latex宏包文件放置目录

    一.宏包文件无法找到 在编译tex文件时,如果宏包文件并不在配置目录中,就会发出类似[LaTeX Error: File `pageno.sty' not found.]的错误. 二.解决方法就是自己 ...

  4. 苹果官方 Crash文件分析方法 (iOS系统Crash文件分析方法)

    对于提交的苹果官方的app,在审核的时候会给我们一些crash文件,对于这些有用的文件,里面是关于我们的bug的一些信息,那么该如何去调试呢 第一步:在任意目录创建一个目录,用来调试crash,我这里 ...

  5. java 文件打包下载

    话不多说,直接上代码 方法需要传入文件目录,比如想打包1目录下的2目录,同时2目录包含3和4目录,name就传入1目录就可以了 打包之后 /*** 文件打包下载** @param src 需要打包的文 ...

  6. php删除excel文件,php操作excel文件的方法小结

    php操作excel文件的方法小结 php操作excel文件的方法有哪些?就跟随百分网小编一起去了解下吧,想了解更多相关信息请持续关注我们应届毕业生考试网! 一.php,不用COM,生成excel文件 ...

  7. php文件夹压缩视频教程,php压缩文件的方法教程

    php可以将服务器的文件夹或多个文件压缩成一个ZIP压缩包,并进行下载,具体的压缩操作方法可以参考下面的方法. php压缩单个文件的方法 php可以对某个指定的文件进行压缩,只要指定被压缩文件的路径即 ...

  8. axure9 html文件使用ie打开图片无法显示_win7系统html文件如何打开 win7系统html文件打开方法【介绍】...

    html其实是超文本标记语言,现在很多网页都是html的格式,而所谓的html文件是一种超文本文件,其中超文本可以使图片或者音乐的非文字元素,使用起来十分广泛,不过最近有有位win7系统用户不知道ht ...

  9. 【C语言中清空文件的方法】

    C语言清空文件内容 C语言中清空文件的方法 C语言中清空文件的方法 C语言中清空文件的方法很简单. 只要以 可写 的方式打开文件,就能将这个文件清空 #include <stdlib.h> ...

  10. C# 将服务器文件批量压缩打包下载至本地两种方法(压缩包缓存到服务器下载、压缩包缓存到内存下载)

    1.将服务器文件打包下载至本地(压缩包缓存到服务器下载) (1)文件批量压缩成压缩包并缓存到服务器(公共方法) using ICSharpCode.SharpZipLib.Checksums; usi ...

最新文章

  1. git常用命令的使用
  2. Android应用程序的调试
  3. 向基于Linux的Oracle RAC 10g集群添加新节点
  4. python请用自定义函数实现账号密码的输入_Python实现控制台输入密码的方法
  5. python入门需要多久-零基础小白多久能学会python
  6. oracle+手工创建pfile,oracle 手工创建数据库
  7. Go gin参数绑定
  8. 100%移植阿里云移动测试技术,竟仅需1周?! ——移动测试专有云(1)
  9. python大游戏_玩游戏就能学Python?太炫酷了!
  10. php7 返回静态类,PHP7 – 未捕获错误:访问未声明的静态属性
  11. iOS 15 新功能:在照片“回忆”中,搭配上喜欢的音乐
  12. ios UIView sizeToFit sizeThatFits
  13. 防止自己骄傲,它是你一生的敌人。
  14. Linux虚拟存储系统
  15. 【项目管理】在IDEA中使用MyBatis_Generator生成Dto、Dao、Mapping
  16. Apache自带的ab压力测试工具用法详解
  17. paraview打开黑屏_ParaView使用指南---ParaView-1.4-使用指南.pdf
  18. 最优秀的数据可视化案例欣赏
  19. 通州十三五规划精华版:增几十万就业机会/一批地铁
  20. 前端学习周报(第三周)

热门文章

  1. 【图像隐写】基于matlab DWT+IDWT数字水印嵌入+提取【含Matlab源码 1530期】
  2. 【背包问题】基于matlab萤火虫算法求解背包问题【含Matlab源码 1440期】
  3. 【带钢厚度预测】基于matlab GUI SVM带钢厚度预测【含Matlab源码 173期】
  4. 【车间调度】基于matlab改进的蛙跳算法求解车间调度问题【含Matlab源码 073期】
  5. oracle 最大一行,一行最大column数和row piece-概念
  6. json输出count如何计算_基于 Kafka + Flink + Redis 的电商大屏实时计算案例
  7. linux系统的电脑要不要买,是否有必要为Linux购买一台相对较高配置的电脑?
  8. ValueError: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216 fro m C...
  9. 随手记--关于K-近邻算法
  10. ThinkPHP框架学习(一)