php通用下载方法,PHP实现打包下载文件的方法示例
本文实例讲述了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实现打包下载文件的方法示例相关推荐
- python的文件读写方法有哪些_python读写文件的方法有哪些
python读写文件的方法有哪些 发布时间:2020-08-07 11:58:05 来源:亿速云 阅读:87 作者:小新 这篇文章主要介绍python读写文件的方法有哪些,文中介绍的非常详细,具有一定 ...
- 合并下载的Solaris镜像为DVD文件的方法
有很多朋友想安装solaris10操作系统,但是没有系统盘或者在官方网站下载之后不会合成.经过多次试验之后现在把正确的方法写下,以方便大家的学习之用. 1.先到官方网站下载最新 ...
- 【LaTex】利用ins文件和dtx文件生成cls或sty文件,latex宏包的生成与创建方法;配置宏包文件的方法,latex宏包文件放置目录
一.宏包文件无法找到 在编译tex文件时,如果宏包文件并不在配置目录中,就会发出类似[LaTeX Error: File `pageno.sty' not found.]的错误. 二.解决方法就是自己 ...
- 苹果官方 Crash文件分析方法 (iOS系统Crash文件分析方法)
对于提交的苹果官方的app,在审核的时候会给我们一些crash文件,对于这些有用的文件,里面是关于我们的bug的一些信息,那么该如何去调试呢 第一步:在任意目录创建一个目录,用来调试crash,我这里 ...
- java 文件打包下载
话不多说,直接上代码 方法需要传入文件目录,比如想打包1目录下的2目录,同时2目录包含3和4目录,name就传入1目录就可以了 打包之后 /*** 文件打包下载** @param src 需要打包的文 ...
- php删除excel文件,php操作excel文件的方法小结
php操作excel文件的方法小结 php操作excel文件的方法有哪些?就跟随百分网小编一起去了解下吧,想了解更多相关信息请持续关注我们应届毕业生考试网! 一.php,不用COM,生成excel文件 ...
- php文件夹压缩视频教程,php压缩文件的方法教程
php可以将服务器的文件夹或多个文件压缩成一个ZIP压缩包,并进行下载,具体的压缩操作方法可以参考下面的方法. php压缩单个文件的方法 php可以对某个指定的文件进行压缩,只要指定被压缩文件的路径即 ...
- axure9 html文件使用ie打开图片无法显示_win7系统html文件如何打开 win7系统html文件打开方法【介绍】...
html其实是超文本标记语言,现在很多网页都是html的格式,而所谓的html文件是一种超文本文件,其中超文本可以使图片或者音乐的非文字元素,使用起来十分广泛,不过最近有有位win7系统用户不知道ht ...
- 【C语言中清空文件的方法】
C语言清空文件内容 C语言中清空文件的方法 C语言中清空文件的方法 C语言中清空文件的方法很简单. 只要以 可写 的方式打开文件,就能将这个文件清空 #include <stdlib.h> ...
- C# 将服务器文件批量压缩打包下载至本地两种方法(压缩包缓存到服务器下载、压缩包缓存到内存下载)
1.将服务器文件打包下载至本地(压缩包缓存到服务器下载) (1)文件批量压缩成压缩包并缓存到服务器(公共方法) using ICSharpCode.SharpZipLib.Checksums; usi ...
最新文章
- git常用命令的使用
- Android应用程序的调试
- 向基于Linux的Oracle RAC 10g集群添加新节点
- python请用自定义函数实现账号密码的输入_Python实现控制台输入密码的方法
- python入门需要多久-零基础小白多久能学会python
- oracle+手工创建pfile,oracle 手工创建数据库
- Go gin参数绑定
- 100%移植阿里云移动测试技术,竟仅需1周?! ——移动测试专有云(1)
- python大游戏_玩游戏就能学Python?太炫酷了!
- php7 返回静态类,PHP7 – 未捕获错误:访问未声明的静态属性
- iOS 15 新功能:在照片“回忆”中,搭配上喜欢的音乐
- ios UIView sizeToFit sizeThatFits
- 防止自己骄傲,它是你一生的敌人。
- Linux虚拟存储系统
- 【项目管理】在IDEA中使用MyBatis_Generator生成Dto、Dao、Mapping
- Apache自带的ab压力测试工具用法详解
- paraview打开黑屏_ParaView使用指南---ParaView-1.4-使用指南.pdf
- 最优秀的数据可视化案例欣赏
- 通州十三五规划精华版:增几十万就业机会/一批地铁
- 前端学习周报(第三周)
热门文章
- 【图像隐写】基于matlab DWT+IDWT数字水印嵌入+提取【含Matlab源码 1530期】
- 【背包问题】基于matlab萤火虫算法求解背包问题【含Matlab源码 1440期】
- 【带钢厚度预测】基于matlab GUI SVM带钢厚度预测【含Matlab源码 173期】
- 【车间调度】基于matlab改进的蛙跳算法求解车间调度问题【含Matlab源码 073期】
- oracle 最大一行,一行最大column数和row piece-概念
- json输出count如何计算_基于 Kafka + Flink + Redis 的电商大屏实时计算案例
- linux系统的电脑要不要买,是否有必要为Linux购买一台相对较高配置的电脑?
- ValueError: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216 fro m C...
- 随手记--关于K-近邻算法
- ThinkPHP框架学习(一)