时间:2021-05-26
php 本身有 zip 模块,可以生产 zip 文件。但是这个 zip 模块只能使用本地文件来打包。如果需要打包输出的文件来自网络,就得先保存临时文件。在文件数量多或者文件大的时候就很杯具。另外,由 php 来输出大的打包文件会占用 php 进程大量时间,影响并发能力。
nginx 有一个第三方模块,mod_zip 。同样可以输出 zip 包。和 X-Accel-Redirect 有点类似,只需要 php 输出相应文件的路径等信息,然后给一个特殊的响应头即可。
nginx zip 模块使用的响应头是 X-Archive-Files: zip 。加上这个响应头,nginx zip 模块就会处理响应正文,完成打包输出。
比如:
复制代码 代码如下:
printf("%s %d %s %s\n", $crc32, $size, $url, $path );
逐条输出要打包的文件。
$crc32 是 16 进制的文件 crc32 值。也可以不提供,用 “-” 代替。不过这样就没法用 Range 分块下载,断点续传了。
$size 是文件大小的十进制整数。
$url 是要打包的源地址。如果要打包一个本地文件,可以先在 nginx 中做一个 internal path。
$path 是 zip 包中的路径。
不过这样没法创建空目录。一方面,zip 格式开始就没有定义空目录,后来的标准和软件都是通过加一个 / 结尾的 0 大小文件来实现的。这时,就需要先在 nginx 中做一个 internal 的 0 大小文件,比如位于 /_0 。然后输出
复制代码 代码如下:
printf("%s %d %s %s\n", '00000000', 0, '/_0', $path.'/');
如果要支持中文路径,可以使用 X-Archive-Charset: utf8 这样的响应头,内容为你输出的编码。nginx zip 模块会按标准转换成 utf8 的标准格式。不过各个软件对这个 zip 的标准支持不一,比如 windows 的 zip 目录就不支持,只能以 gbk 编码直接输出。其他软件对编码支持效果也各不相同。测试过的 winrar,7zip,windows zip 目录中,winrar 倒是都可以很好支持。7zip 可能会把部分中文空目录变成 0 大小文件。所以,这点还需要自己斟酌处理。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
今天试了一下用zipfile模块读取有密码的zip压缩文件。今天用winrar5.6将一个名字为1.xlsx的excel文件打包成1.zip压缩包。采用默认的压
zip文件是我们经常使用的打包格式之一,python解压和压缩zip效率非凡。python解压zip文档:复制代码代码如下:#/usr/bin/python#c
zip格式后缀的文件是经过了压缩打包的文件。zip文件用什么打开呢,如何打开zip文件,需要安装压缩软件。如果电脑上有可以直接右击打开,如果没有就得安装个压缩软
zip格式后缀的文件是经过了压缩打包的文件。zip文件用什么打开呢,如何打开zip文件,需要安装压缩软件。如果电脑上有可以直接右击打开,如果没有就得安装个压
php读取zip文件(删除文件,提取文件,增加文件)实例从zip压缩文件中提取文件复制代码代码如下:open('jQuery五屏上下滚动焦点图代码.zip')=