PHP生成ZIP压缩文件


/*
* 生成zip压缩文件
* $sourceDir:被压缩的文件夹或文件
* $outFileName:输出的压缩文件名称
* */
function createZipResources($sourceDir, $outFileName = '', $filesName)
{
if ($outFileName == '') {
$outFileName = time().'.zip';
} else {
$outFileName = $outFileName.'.zip';
} $fileNames = []; //判断需要被压缩的目标是文件还是文件夹
if (is_file($sourceDir)) {
$fileNames['file'][basename($sourceDir)] = $sourceDir;
} else {
$fileNames = read_all_dir($sourceDir);
} if (!array_key_exists('file', $fileNames) && !array_key_exists('dir', $fileNames)) {
$fileNames['dir'][basename($sourceDir)] = [];
} // 生成文件
$zip = new ZipArchive (); // 使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释
if ($zip->open ($outFileName, ZIPARCHIVE::CREATE ) !== TRUE) {
exit ( '无法打开文件,或者文件创建失败' );
}
$fileNameArr = $fileNames;
$toFolderZip = function ($fileNameArr, &$zip, $base = '') use (&$toFolderZip) {
foreach ( $fileNameArr as $key => $value ) {
if ($key == 'file') {
foreach ($value as $fileName => $filePath) {
$fileName = urldecode($fileName);
if ($base == '') {
$zip->addFile($filePath, $fileName);
} else {
$zip->addFile($filePath, $base.'/'.$fileName);
} }
} if ($key == 'dir') {
foreach ($value as $folderName => $folderObject) {
$folderName = urldecode($folderName);
if ($base == '') {
$zip->addEmptyDir($folderName);
$based = $folderName;
} else {
$based = $base.'/'.$folderName;
$zip->addEmptyDir($based);
}
$toFolderZip($folderObject, $zip, $based);
}
} }
};
$toFolderZip($fileNameArr, $zip);
$zip->close(); // 关闭
header("Cache-Control: public");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename='.$filesName.'.zip'); //文件名
header("Content-Type: application/zip"); //zip格式的
header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
header('Content-Length: '. filesize($outFileName)); //告诉浏览器,文件大小
return @readfile($outFileName);
//return ['status'=>'YES', 'info' => '压缩完成'];
}

PHP生成ZIP压缩文件的更多相关文章

  1. java生成zip压缩文件,解压缩文件

    1.生成zip public static void main(String[] args) { try { // testZip("c:\\temp.txt", "c: ...

  2. php生成zip压缩文件的方法,支持文件和压缩包路径查找

    /* * new creatZip($_dir,$_zipName); *@ _dir是被压缩的文件夹名称,可使用路径,例 'a'或者'a/test.txt'或者'test.txt' *@ _zipN ...

  3. java直接生成zip压缩文件精简代码(跳过txt文件)

    /** * @param args */ public static void main(String[] args) throws Exception{ ZipOutputStream zos = ...

  4. 【VC++技术杂谈008】使用zlib解压zip压缩文件

    最近因为项目的需要,要对zip压缩文件进行批量解压.在网上查阅了相关的资料后,最终使用zlib开源库实现了该功能.本文将对zlib开源库进行简单介绍,并给出一个使用zlib开源库对zip压缩文件进行解 ...

  5. java ZIP压缩文件

    问题描述:     使用java ZIP压缩文件和目录 问题解决:     (1)单个文件压缩 注:     以上是实现单个文件写入压缩包的代码,注意其中主要是在ZipOutStream流对象中创建Z ...

  6. PHP zip压缩文件及解压

    PHP zip压缩文件及解压 利用ZipArchive 类实现 只有有函数.界面大家自己写 ZipArchive(PHP 5.3 + 已自带不需要安装dll) /** * 文件解压 * @param ...

  7. php实现ZIP压缩文件解压缩

    测试使用了两个办法都可以实现: 第一个:需要开启配置php_aip.dll <?php //需开启配置 php_zip.dll //phpinfo(); header("Content ...

  8. java将文件打包成ZIP压缩文件的工具类实例

    package com.lanp; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...

  9. php实现ZIP压缩文件解压缩(转)

    测试使用了两个办法都可以实现: 第一个:需要开启配置php_aip.dll <?php //需开启配置 php_zip.dll //phpinfo(); header("Content ...

随机推荐

  1. HDU 5353—— Average——————【贪心+枚举】

    Average Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total S ...

  2. [转]c#匿名类

    首先让我们看一个例子, 假设我们并没有Person类, 并且我们关心的属性只有Name和Age. 下面的代码演示了我们如何在没有声明类型的情况下来构建一个对象的: 1: var tom = new { ...

  3. spring mvc改造成spring boot

    一.新增依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  4. 基于nodejs的DNS查询工具

    开始这个实例之前,我们简单谈一下Node.js吧,Node.js是一个由JavaScript书写而成的强大Web开发框架,它让开发强壮的.伸缩性良好的服务器端Web应用变得更加简单.容易.这种技术诞生 ...

  5. Bootstrap学习笔记(四)

    四.JS插件 概述:与jQueryUI库类似,Bootstrap提供了十几个插件函数.有两种调用方法: (1) 传统JS变成方式 $(...).插件函数.(); (2) 使用data-*扩展属性(推荐 ...

  6. log4j.dtd

    <?xml version="1.0" encoding="UTF-8" ?> <!-- Licensed to the Apache Sof ...

  7. 微信小程序电商实战-商品列表流式布局

    今天给大家分享一下微信小程序中商品列表的流式布局方式,根据文章内容操作就可以看到效果哦~~~ 流式布局概念 流式布局也叫百分比布局 把元素的宽,高,margin,padding不再用固定数值,改用百分 ...

  8. vue-样式问题

    问题: 今天在用vue开发单页面应用的时候,遇到一个问题,在A页面,直接刷新,页面的布局样式之类的是没有问题的,不过在B页面跳转到A页面,那么A页面有一些样式就不是预期的效果. 发现解决问题: 用调试 ...

  9. thinkphp中怎么判断是手机端访问还是pc端访问?

    function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) r ...

  10. ASP.NET设置母版页

    母版页允许开发人员创建具有指定的可编辑区域的站点级模板.随后,此模板可应用到网站中的 ASP.NET 页面上.这些 ASP.NET 页面只需为母版页中指定的可编辑区域提供相应内容 – 在使用母版页的所 ...