php打包文件为ZIP包后下载到本地
这是一个工作中需要打包下载当前产品的所有图片到本地,文件格式为ZIP压缩包,打包下载文件跟图片一样,本程序细节为实际情况,使用需按照自己实际情况书写: <?php
/*********************************************程序说明********************************************
*程序功能:产品图片打包下载,zip压缩包格式
************************************************************************************************/
header("Content-type:text/html;charset=utf-8");
if(!isset($_GET['pro_code'])){
exit('错误,您访问的网页不存在!');
}
$pro_code = $_GET['pro_code'];
//获取列表
$dir = $_SERVER['DOCUMENT_ROOT'].'/imgs/ft/'.substr($pro_code,0,1).'/'.substr($pro_code,1,1).'/';
$filelist = getImgList($dir); $filepath = $_SERVER['DOCUMENT_ROOT'].'/tmp/product_img/';
if(!is_dir($filepath)){
mkdir($filepath);
}
//文件名称及路径
$filename = $filepath.$pro_code.'.zip';
$filename = iconv("utf-8","gb2312",$filename);//解决中文不能显示问题 if(!file_exists($filename)){
//使用ZipArchive类重新生成文件
$zip = new ZipArchive();
if($zip->open($filename,ZIPARCHIVE::CREATE) !== TRUE){
exit('无法打开文件,或者文件创建失败!');
}
foreach($filelist as $file){
if(file_exists($file) && isCurrentImg($file, $pro_code)){
$zip->addFile($file, basename($file));
}
}
$zip->close();
} //创建后需再次判断文件是否存在
if(!file_exists($filename)){
exit('没有找到文件!');
} //下面是输出下载;
header("Cache-Control:max-age=0");
header("Content-Description:FileTransfer");
header('Content-disposition:attachment;filename='.basename($filename));//文件名
header("Content-Type:application/zip");//zip格式的
header("Content-Transfer-Encoding:binary");//告诉浏览器,这是二进制文件
header('Content-Length:'.filesize($filename));//告诉浏览器,文件大小
@readfile($filename);//输出文件; //检验是否为当前产品图片函数
function isCurrentImg($filepath, $pro_code){
$file = substr($filepath, strrpos($filepath, '/')+1,strrpos($filepath, '-')-strrpos($filepath, '/')-1);
if($file == $pro_code){
return true;
}else{
return false;
}
} //获取图片文件列表函数
function getImgList($dir){
$files = array();
if(is_dir($dir)){
$file_dir = scandir($dir);
foreach($file_dir as $file){
if($file == '.' || $file == '..'){
continue;
}elseif(is_dir($dir.$file.'/')){
$files = array_merge($files, getImgList($dir.$file.'/'));
}else{
array_push($files, $dir.$file);
}
}
}
return $files;
}
php打包文件为ZIP包后下载到本地的更多相关文章
- JAVA 实现将多目录多层级文件打成ZIP包后保留层级目录下载 ZIP压缩 下载
		将文件夹保留目录打包为 ZIP 压缩包并下载 上周做了一个需求,要求将数据库保存的 html 界面取出后将服务器下的css和js文件一起打包压缩为ZIP文件,返回给前台:在数据库中保存的是html标签 ... 
- java批量下载文件为zip包
		批量下载文件为zip包的工具类 package com.meeno.trainsys.util; import javax.servlet.http.HttpServletRequest; impor ... 
- java笔试题: ——将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面
		将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面 import java.io.*; import java.util.zip.ZipEntry; import java.uti ... 
- mac终端命令加密压缩文件为zip包
		mac终端命令加密压缩文件为zip包,命令如下: zip -e ~/desktop/a.zip b.doc c.txt d.sql 注释:a.zip为加密后的文件 b.doc c.txt d.sql为 ... 
- PHP 用 ZipArchive 打包指定文件到zip供用户下载
		Ubuntu需安装zlib sudo apt-get install ruby sudo apt-get install zlib1g zlib1g.dev Windows需开启php_zip.d ... 
- maven打war包后无法依赖本地工程的jar包,造成debug时跳到class文件而不是本地java文件
		问题现象:项目结构如下 growup-service | - - - - - -growup-api | - - - - - -growup-core | - - - - - -growup-war ... 
- springboot jar文件打zip包运行linux环境中
		1.添加打包配置文件 1.1 assembly.xml <assembly xmlns="http://maven.apache.org/plugins/maven-assembly ... 
- shell命令:给当前目录里一个文件压缩一份不包含.svn文件的zip包
		filepath=$(cd ")"; pwd) packagePath="$filepath"/package zipPath="$filepath& ... 
- java 实现多个文件的Zip包的生成
		最近在项目中遇到多个文件的达成Zip包,由于对这块不熟,在网上找到一个,现在忘了找的谁的,如果您发现了,请告诉我你的链接,我指明出处 下面是相关代码: package run.utils; impor ... 
随机推荐
- JAVA的Executor框架
			Executor框架分离了任务的创建和执行.JAVA SE5的java.util.concurrent包中的执行器(Executor)管理Thread对象,从而简化了并发编程.Executor引入了一 ... 
- 使用DBCP连接池对连接进行管理
			//需要引用的jar包有4个,分别是commons-pool2-2.4.2.jar.commons-dbcp2-2.1.1.jar.mysql-connector-java-5.1.42-bin.ja ... 
- javascript 面向对象基础 (1)
			常见的创建对象的方式有3种: ① 声明变量的方式 var obj1 = { key1: "val1", key1: "val2", show: function ... 
- java虚拟机内存分配
- URI结构
			[scheme:][//host:port][path][?query][#fragment] path:从端口后第一个/开始,可以有多个,每个用/连接. query:从第一个?开始,至行尾或#结束. ... 
- html学习笔记 - 特殊字符
- dockerfile语法
			dockerfiles的指令不区分大小写,但约定为全部大写 dockerfiles支持如下语法命令: 1.FROM <image name> 所有的dockerfile都必须以from命令 ... 
- Java读写Excel之POI超入门
			转自:http://rensanning.iteye.com/blog/1538591 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给J ... 
- 测试class
			各种断言方法: assertEqual(a,b) a == b assertNotEqual(a,b) a != b assertTrue(x) x == True assertFalse(x) x ... 
- Java集合类从属关系
			Java的集合分为了四类:List Set Queue Map,每类都有不同的实现,有基于数组实现的,有基于链表实现的,有基于xx树实现的,不同的实现虽在功能上可以相互替代但都有各自的应用场景,如基于 ... 
