PHP生成ZIP压缩文件

时间:2022-09-20 22:24:46

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压缩文件解压缩&lpar;转&rpar;

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

随机推荐

  1. 用JAVA写查询一个字符串中是否包含另外一个字符串以及出现的次数

    package JAVA; import java.awt.List;import java.util.ArrayList;/** *  * @author 梁小鱼 * */public class ...

  2. powerdesigner逆向工程,从数据库导出PDM

    本文工具: powerdesigner 15, 数据源oracle 11g 第一步如图,新建一个模型 第二步:选中当前模型 testdb.  然后在菜单栏database->update mod ...

  3. &lbrack;IOS&rsqb;《A Swift Tour》翻译(一)

    以下翻译内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3768936.html 碎碎念... Swift是苹果在WWDC刚发 ...

  4. jquery过滤器之&colon;contains&lpar;&rpar;、&period;filter&lpar;&rpar;

    :contains 选择器选取包含指定字符串的元素. 该字符串可以是直接包含在元素中的文本,或者被包含于子元素中. 经常与其他元素/选择器一起使用,来选择指定的组中包含指定文本的元素,如: $(&qu ...

  5. C&num; 文件粉碎

    >文件粉碎的流程 填充文件 更改最后使用/创建时间 更改名称 将大小改为 0 kb 删除 using System; using System.Collections.Generic; usin ...

  6. Jmeter的简单练习

    一.安装Jmeter 1.下载Jmeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi 目前最新版为2.9,其余文件如源代码等也可从如下官网下载 ...

  7. Python基础-类变量和实例变量

    Python基础-类变量和实例变量 写在前面 如非特别说明,下文均基于Python3 大纲: 1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Genera ...

  8. Spring事务管理的另一种方式--TransactionTemplate编程式事务管理简单入门

    1, 一直以来, 在用Spring进行事物管理时, 只知道用声明式的策略, 即根据不同的数据源, 配置一个事物管理器(TransactionManager), 通过配置切面(PointCut)应用到相 ...

  9. express中间件系统的基本实现

    一直觉得express的中间件系统这种流式处理非常形象,就好像加工流水线一样,每个环节都在针对同一个产品的不同部分完成自己的工作,最后得到一个成品.今天就来实现一个简易的[中间件队列]. 一. API ...

  10. 使用GoldenGate初始化的两种方式

    在使用OGG开始增量数据的实时复制之前,一般需要对当前的存量数据进行初始化,如果是同构数据库,则可以使用数据库自带的工具完成,比如Oracle DB中的rman, expdp/impdp等. 其实og ...