php打包文件为ZIP包后下载到本地

时间:2022-09-20 23:00:16
这是一个工作中需要打包下载当前产品的所有图片到本地,文件格式为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包后下载到本地的更多相关文章

  1. JAVA 实现将多目录多层级文件打成ZIP包后保留层级目录下载 ZIP压缩 下载

    将文件夹保留目录打包为 ZIP 压缩包并下载 上周做了一个需求,要求将数据库保存的 html 界面取出后将服务器下的css和js文件一起打包压缩为ZIP文件,返回给前台:在数据库中保存的是html标签 ...

  2. java批量下载文件为zip包

    批量下载文件为zip包的工具类 package com.meeno.trainsys.util; import javax.servlet.http.HttpServletRequest; impor ...

  3. java笔试题&colon; ——将e&colon;&sol;source文件夹下的文件打个zip包后拷贝到f&colon;&sol;文件夹下面

    将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面 import java.io.*; import java.util.zip.ZipEntry; import java.uti ...

  4. mac终端命令加密压缩文件为zip包

    mac终端命令加密压缩文件为zip包,命令如下: zip -e ~/desktop/a.zip b.doc c.txt d.sql 注释:a.zip为加密后的文件 b.doc c.txt d.sql为 ...

  5. PHP 用 ZipArchive 打包指定文件到zip供用户下载

    Ubuntu需安装zlib sudo apt-get install ruby sudo apt-get install zlib1g zlib1g.dev   Windows需开启php_zip.d ...

  6. maven打war包后无法依赖本地工程的jar包,造成debug时跳到class文件而不是本地java文件

    问题现象:项目结构如下 growup-service | - - - - - -growup-api | - - - - - -growup-core | - - - - - -growup-war ...

  7. springboot jar文件打zip包运行linux环境中

    1.添加打包配置文件 1.1  assembly.xml <assembly xmlns="http://maven.apache.org/plugins/maven-assembly ...

  8. shell命令:给当前目录里一个文件压缩一份不包含&period;svn文件的zip包

    filepath=$(cd ")"; pwd) packagePath="$filepath"/package zipPath="$filepath& ...

  9. java 实现多个文件的Zip包的生成

    最近在项目中遇到多个文件的达成Zip包,由于对这块不熟,在网上找到一个,现在忘了找的谁的,如果您发现了,请告诉我你的链接,我指明出处 下面是相关代码: package run.utils; impor ...

随机推荐

  1. SQL SERVER建库&amp&semi;用户赋权限

    create database ServiceDB on primary ( name='ServiceDB_data', -- 主数据文件的逻辑名称 filename='D:\WebRoot\DB\ ...

  2. &lbrack;VBS&rsqb;脚本中的字典、动态数组、队列和堆栈

    今天用VBS脚本写了几个程序,用到了字典(Dictionary).动态数组(ArrayList).队列(Queue)和堆栈(Stack).现在写篇Blog总结一下 :-) 1.编写环境 今天突发奇想下 ...

  3. 通过百度地图API定位--第三方开源--百度地图(一)

    1.把百度地图定位API(下载地址:http://lbsyun.baidu.com/sdk/download?selected=location)里面的libs复制到自己的项目libs里面 2.进行相 ...

  4. 删除 GPT 保护分区

    问题: 将内置和/或外置硬盘连接到 Windows XP 32 位操作系统时,将无法访问硬盘,“磁盘管理”将会报告该硬盘包含 GPT 保护分区.在此状态下,将无法对硬盘进行重新分区和格式化. 原因: ...

  5. 给id赋值

    var div = document.getElementByTagName('div') div.id="mydiv";div.setAttribute("id&quo ...

  6. STM8时钟系统详解

    就我个人看来,研究一块单片机,分为新手和老手两种模式,新人迫切的想先用,你得告诉他们怎么样最快的写出一个能跑起来的程序,告诉他们每一个外设的使用方式,老手不同,用的单片机多了外设对于他们而言没太多好奇 ...

  7. Zeromq自连接错误

    Zeromq自连接错误(金庆的专栏)Zeromq消息中间件开发的服务器和客户端不必按顺序启动,客户端可以在服务器开启之前启动.这是Zmq特别好用的一大特性.利用该特性,网游各功能服务器可以任意重启,实 ...

  8. 再谈Promise

    方法 构造函数 接受的参数是一个带两个Function参数的函数,实际的异步代码编写在这个函数里,成功后调用第一个参数,失败调用第二个: Promise.prototype.catch 当构造函数里调 ...

  9. python2和python3的主要区别

    作为一个py3土著,并不是很关心这个问题,但是总有人隔三差五问这个问题,还是捋了一下. 这里列出几个主要区别: 1.最常见的人尽皆知的print()函数 在py2中,print是一个语句,不带括号,也 ...

  10. TERMIOS详解【转】

    转自:https://blog.csdn.net/guo_wangwei/article/details/1102931# TERMIOS NAME termios, tcgetattr, tcset ...