php 复制文件夹并压缩到最小_php压缩多个文件打包成zip并下载到本地
完成时间:2018-01-03
展现方式:整个相册图片的导出(下载到本地)直接在页面上生成下载没有什么另存为什么默认路径
基本步骤:
1.用户点击按钮跳转到对应相册导出的方法
---->2.在方法中通过页面的相册id号进行数据库查找对应相册的每个图片路径
---->3.记录保存到数组中
---->4.后续把图片打包进压缩文件直接把数组的路径键读取压缩进即可.
遇到的坑:
A.如何解决在服务器生成一次压缩包.zip文件之后每次通过文件名查找文件是否存在存在就返回文件.
1.尝试用相册id号查找相册名,以相册名.zip为生成的文件名.在有中文字符的前提,生成的压缩文件会出错(格式之类的问题).在网上查找解决方案如下:用(纯英文不算)iconv("utf-8","gb2312",$path );
照样出错,不存在编码什么的转换一下就ok的问题,当然我放弃了他. X
2.利用时间戳来生成文件名(时间不含有中文,只有数字,而且唯一性可判断),仔细想想你每次都会根据当前时间生成一个新的文件.所以我就想解决办法,可否通过生成一个静态变量或者静态数组第一次生成该相册的压缩包时把该相册的id为数组键,第一次的文件名为键值.形式如下$s1[$相册id]=$filename;//$filename=第一次生成的压缩包文件名.之后每次执行导出相册的时候则通过判断是否存在这个相册id的$filename来进行.如果存在这个相册键值则返回这个文件名为导出相册.当然我没有尝试这个静态数组的方式去写,因为我不明确怎么去声明,在哪里声明这个静态变量.这个方法交给有心人去尝试了.我还想到了一种需要数据库的操作,就是你可以在对应的相册上加一个字段为打包相册的文件名当然不能含有中文,你可以每次导出的时候查询这个字段就可以了. :)
A.√解决办法:
通过对应的相册id查到唯一的相册名(所有类型的字符中文,数字等都可以)保存下来通过md5转换他这样他就是不含有中文的文件名并且唯一:)
形式如下:$s1=md5($s1);
B.再说一个小坑:当你都没有问题后你下载打包的压缩文件时你会发现你的zip有时候下载的文件大小为0字节,:D就根本没下下来好嘛!但是你会发现小的压缩文件还是可以下下来的比如十几二十MB的,这里就是要设置php配置文件了。
B.√解决办法:php.ini:memory_limit 主要是解决readfile() 函数进行的文件下载大小设置。
memory_limit = XXXM (1024M 512M)等等看你喜欢
接下来上代码:
/** 导出相册*/
$extra->append(array(
' 导出相册< /a >',
));//$albumId=代表对应相册id,a=exportAlbum跳转导出相册这个方法
public static function exportAlbum(){
error_reporting(E_ALL^E_NOTICE);
$albumId = Safe::number(request('albumid'), '相册ID', false);
$rs = System::$pdo->prepare("SELECT `img` FROM `photo` WHERE `albumid`=$albumId");
$rs->execute();
$data = $rs->fetchAll(PDO::FETCH_ASSOC);
$rs1 = System::$pdo->prepare("SELECT `name` FROM `album` WHERE `id`=$albumId");
$rs1->execute();
$data1 = $rs1->fetchAll(PDO::FETCH_ASSOC);
$s1=$data1[0][name];
$s1=md5($s1);
$filename ="$s1.zip"; //最终生成的文件名(含路径)
if(!file_exists($filename) ){
$zip = new ZipArchive();
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
exit('无法打开文件,或者文件创建失败');
}
foreach( $data as $key=>$val){
if(file_exists($val[img])){
$zip->addFile( $val[img], basename($val[img]));
}
}
$zip->close();//关闭
}
if(!file_exists($filename)){
exit("无法找到文件");
}
header("Cache-Control: public");
header("Content-Description: File Transfer");
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);
exit;
}
php 复制文件夹并压缩到最小_php压缩多个文件打包成zip并下载到本地相关推荐
- php 复制文件夹并压缩到最小_PHP压缩文件夹的方法
PHP压缩文件夹的方法 public function addFileToZip($path, $zip) { $handler = opendir($path); //打开当前文件夹由$path指定 ...
- php 复制文件夹并压缩到最小_php与语音识别功能如何对接
语音识别的功能的应用场景 将语音实时识别为文字,适用于语音聊天.语音输入.语音搜索.语音下单.语音指令.语音问答等多种场景. 我们还是利用百度API,语音识别功能,给大家讲解如何使用.API主要就是要 ...
- php 复制文件夹并压缩到最小_php将文件夹打包成zip文件
function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. while(($filename=read ...
- php 复制文件夹并压缩到最小_php实现对文件压缩简单的方法
压缩一个文件 我们将一个文件生成一个压缩包. $path = "c:/wamp/www/log.txt"; $filename = "test.zip"; $z ...
- php 复制文件夹并压缩到最小_php获取所有文件并压缩
/* * 压缩文件 * */ function zip($files){ $zipName = 'download.zip'; $zip = new \ZipArchive;//使用本类,linux需 ...
- php 复制文件夹并压缩到最小_php在线压缩并下载压缩文件的方法
/* *下载类,zip压缩文件下载 */ class download{ protected $_filename; protected $_filepath; protected $_filesiz ...
- win7压缩文件夹怎么压缩到最小
在我们日常使用win7系统的过程中,压缩文件作为经常使用的东西相信很多小伙伴都对它不陌生,由于其占用空间小,所以网站下载的文件大多都是压缩包格式.很多时候我们和朋友分享文件也以压缩包的形式传输.接下来 ...
- 关于springmvc下服务器文件打包成zip格式下载功能
关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储 版权声明:本文为博主原创 ...
- Java将多个文件打包成ZIP并下载
Java将多个文件打包成ZIP并下载 需求是多个文件需要同时打包成zip压缩文件并下载到本地,首先我需要的是知道下载文件的路径.我有一个专门的sys_file_info表,表中有对应的文件路径.业务表 ...
最新文章
- 【Unity 3D】学习笔记三十六:物理引擎——刚体
- 8张图让你一步步看清 async/await 和 promise 的执行顺序
- IQ01/IQ02 Create/Change Material Serial Number BAPI
- 信息检索及DM必备知识总结:luncene
- C++ 面向对象(四)—— 多态 (Polymorphism)
- 4.寻找两个正序数组的中位数
- fiddler 查看接口响应时间
- 管家婆财贸双全ⅡTOP 期间202012的损益类科目本币(外币或者数量)余额不为零,不能年结存。
- Mac CAD 安装完成后,打开注册机时出现 应用程序“02_注册机”不能打开。
- HTML5射击鸭子小游戏
- 2018-1-27工作周总结
- 世界药王再遭“无间道”,药企如何保护自己的数据
- 随机事件与概率术语与主题
- SNIPER- Efficient Multi-Scale Training
- PHP汉字转拼音函数
- 接连三个百度副总裁都栽在“违纪”、“腐败”上,这是怎么了?
- 对Stable Diffusion做fine-tune时遇见的bug
- 让数据站住脚-浅谈用户研究中的信度与效度
- 如何找到时序列中的缺失月(missing month)/天(missing day)并补全?尤其针对多个客户或产品的月/天销量 -- 史上最简单方法,只要2行python代码
- Android学习笔记Android必备开发工具之一命令行创建Git库
热门文章
- 高数量类别特征(high-cardinality categorical attributes)的预处理方法
- 微信支付之微信小程序支付
- simHash 简介以及 java 实现
- 使用gulp编译 sass和less
- 最新php版本下载地址
- 论文笔记 :Multi30K: Multilingual English-German Image Descriptions
- 什么是servlet ?简述servlet执行原理?生命周期是怎样的?
- 为什么需要api产品经理
- QT遇到“常量中有换行符”的问题
- Python+Vue计算机毕业设计面向轨道交通的智能服务链系统jop1x(源码+程序+LW+部署)