将多级目录打包成zip文件

最近接触PHP,需要用到zip压缩,在网上搜索的一大堆,发现代码都不低于50行。  而且调用还很费事(基础太少看不懂)。让我收获的是Php提供有一个ZipArchive类,并有如下方法。

bool
addEmptyDir(
string
$dirname
)

bool
addFile
( string
$filename
[, string$localname
= NULL[,
int$start
= 0 [, int
$length
= 0 ]]] )

mixed open(
string
$filename
[, int$flags
] )

bool close(
void )

回忆用java中写的思路,便摩擦php,实现如下:

|--调用

		//创建<span style="font-family: Arial, Helvetica, sans-serif;">ZipArchive对象</span>
		$zip = new ZipArchive();
		//参数1:zip保存路径,参数2:ZIPARCHIVE::CREATE没有即是创建
		if(!$zip->open("$exportPath.zip",ZIPARCHIVE::CREATE))
		{
			echo "创建[$exportPath.zip]失败<br/>";return;
		}
		//echo "创建[$exportPath.zip]成功<br/>";
		$this->createZip(opendir($exportPath),$zip,$exportPath);
		$zip->close();

|--执行

	/*压缩多级目录
		$openFile:目录句柄
		$zipObj:Zip对象
		$sourceAbso:源文件夹路径
	*/
	function createZip($openFile,$zipObj,$sourceAbso,$newRelat = '')
	{
		while(($file = readdir($openFile)) != false)
		{
			if($file=="." || $file=="..")
				continue;

			/*源目录路径(绝对路径)*/
			$sourceTemp = $sourceAbso.'/'.$file;
			/*目标目录路径(相对路径)*/
			$newTemp = $newRelat==''?$file:$newRelat.'/'.$file;
			if(is_dir($sourceTemp))
			{
				//echo '创建'.$newTemp.'文件夹<br/>';
				$zipObj->addEmptyDir($newTemp);/*这里注意:php只需传递一个文件夹名称路径即可*/
				$this->createZip(opendir($sourceTemp),$zipObj,$sourceTemp,$newTemp);
			}
			if(is_file($sourceTemp))
			{
				//echo '创建'.$newTemp.'文件<br/>';
				$zipObj->addFile($sourceTemp,$newTemp);
			}
		}
	}

|--补充

开启PHP支持ZipArchive

在php.ini文件中将extension=php_zip.dll  开头的;的去掉。

时间: 2024-10-12 22:59:06

将多级目录打包成zip文件的相关文章

十一、springboot 配置log4j2以及打包成zip文件

前言 其实我们前面已经配置了日志,但是最近总感觉日志日志格式看的不舒服,并且每次打包都是一个jar 文件,lib都包含在jar 中,每次做很小的修改都需要重新替换jar文件,jar文件会比较大,传输起来比较慢.所以做一些改进. 配置log4j2 好了,废话不多说了,先来在Springboot中配置log4j2吧. pom.xml springboot 项目默认的是使用logback 的,所以我们想要使用log4j ,需要将原来的logback 框架屏蔽掉,再引入log4j. 首先我们在pom.x

目录下获取指定后缀文件打包成zip文件

file_dir = os.path.abspath('.') + "/MarkCoin" def zip_ya(): L = [] for root, dirs, files in os.walk(file_dir): for file in files: if os.path.splitext(file)[1] == '.png' or os.path.splitext(file)[1] == '.xlsx': L.append(file) z = zipfile.ZipFile(

vue-webpack项目自动打包压缩成zip文件批处理

为什么需要这个? 使用vue框架开发项目,npm run build这个命令会一直用到,如果需要给后端发包,那你还要打包成zip格式的压缩包,特别是项目提测的时候,一天可能要执行重复好几次,所以才有了写这个批处理的冲动. 虽然说以前没写过,但至少用过.找了份批处理命令的文章了解了下,按自己预先想好的思路,百度了关键的执行命令,然后就自己不断的修改调试,最终完成了这个集webpack打包.压缩成zip格式文件.打开当前文件夹这三个功能的批处理. 怎么用? 只需要把这个批处理文件放在项目根目录下,轻

Java实现文件自动打包成zip并下载的代码

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipOutputStreamDemo { public static void main(String[] args) throws Exception { by

java批量下载,将多文件打包成zip格式下载

现在的需求的: 根据产品族.产品类型,下载该产品族.产品类型下面的pic包: pic包是zip压缩文件: t_product表: 这些包以blob形式存在另一张表中: t_imagefile表: 现在要做的是:将接入网.OLT下面的两个包downloadPIC:MA5800系列-pic.zip 和 MA5900-pic.rar一起打包成zip压缩文件下载下来: 代码: ProductController.java: /** * 根据产品族.产品类型下载照片包 */ @RequestMapping

将引用了第三方jar包的Java项目打包成jar文件的两种方法

方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目下建立文件MANIFEST.MF,内容如下: Manifest-Version: 1.0 Class-Path: lib/commons-codec.jar lib/commons-httpclient-3.1.jar lib/commons-logging-1.1.jar lib/log4j-1.

java类打包成jar文件&amp;&amp;jar包的引入

一.将类打包成jar文件 首先分别看下MainActivity.java和func.java的源代码 现在要将func.java打包成jar包,方法如下: a.右击func.java ->Export ->Java ->JAR file b.在Select the resources to export中选择要打包的类,这里注意,如果这个类有调用其他动态/静态库,不需要一起选择,只选择java文件.库文件随着jar一起放到新工程目录下即可引用.然后输入JAE名称和存放位置,点finish

好记性不如烂笔头------按键灯jni使用,打包成so文件并使用

MTK平台如果在硬件上增加了按键灯,第三方APP和framework层想要调用的话,均需要通过jni接口,具体用法不太一样,这里简单介绍一下我的使用过程. 首先,需要增加KeyLed.c和头文件KeyLed.h两个接口函数: (\hardware\libhardware_legacy\key_leds\key_leds.c) ( \hardware\libhardware_legacy\include\hardware_legacy\KeyLed.h) 1,这里简单介绍一下打包成so文件的方法(

手把手教你如何把java代码,打包成jar文件以及转换为exe可执行文件

1.背景: 学习java时,教材中关于如题问题,只有一小节说明,而且要自己写麻烦的配置文件,最终结果却只能转换为jar文件.实在是心有不爽.此篇博客教你如何方便快捷地把java代码,打包成jar文件以及转换为exe可执行文件 2.前言: 我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 3.准备: eclipse或Myeclipse以及exe4j(网上有软件和帐号下载)