php调用nginx的mod_zip模块打包ZIP文件

2015-01-24信息快讯网

这篇文章主要介绍了php调用nginx的mod_zip模块打包ZIP文件,需要的朋友可以参考下

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 大小文件。所以,这点还需要自己斟酌处理。

php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
php禁止直接从浏览器输入地址访问.php文件的方法
自编函数解决pathinfo()函数处理中文问题
ThinkPHP实现二级循环读取的方法
ThinkPHP写数组插入与获取最新插入数据ID实例
ThinkPHP有变量的where条件分页实例
详解PHP导入导出CSV文件
php实现图片文件与下载文件防盗链的方法
ThinkPHP实现带验证码的文件上传功能实例
封装ThinkPHP的一个文件上传方法实例
php的ZipArchive类用法实例
php实现的zip文件内容比较类
ThinkPHP实现将本地文件打包成zip下载
CI框架中zip类应用示例
PHP独立Session数据库存储操作类分享
php+ajax导入大数据时产生的问题处理
CI框架中libraries,helpers,hooks文件夹详细说明
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
PHP、Nginx、Apache中禁止网页被iframe引用的方法
IIS6.0 开启Gzip方法及PHP Gzip函数分享
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
php实现文件下载实例分享
在PHP中使用X-SendFile头让文件下载更快
php中$美元符号与Zen Coding冲突问题解决方法分享
分享一段php获取linux服务器状态的代码
查找php配置文件php.ini所在路径的二种方法
php实现zip压缩文件解压缩代码分享(简单易懂)
php 解压rar文件及zip文件的方法
PHP zip扩展Linux下安装过程分享
一个PHP的ZIP压缩类分享
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
©2014-2024 dbsqp.com