php调用nginx的mod_zip模块打包ZIP文件
2023-06-13 09:15:28 时间
php本身有zip模块,可以生产zip文件。但是这个zip模块只能使用本地文件来打包。如果需要打包输出的文件来自网络,就得先保存临时文件。在文件数量多或者文件大的时候就很杯具。另外,由php来输出大的打包文件会占用php进程大量时间,影响并发能力。
nginx有一个第三方模块,mod_zip。同样可以输出zip包。和X-Accel-Redirect有点类似,只需要php输出相应文件的路径等信息,然后给一个特殊的响应头即可。
nginxzip模块使用的响应头是X-Archive-Files:zip。加上这个响应头,nginxzip模块就会处理响应正文,完成打包输出。
比如:
printf("%s%d%s%s\n",$crc32,$size,$url,$path);
逐条输出要打包的文件。
$crc32是16进制的文件crc32值。也可以不提供,用“-”代替。不过这样就没法用Range分块下载,断点续传了。
$size是文件大小的十进制整数。
$url是要打包的源地址。如果要打包一个本地文件,可以先在nginx中做一个internalpath。
$path是zip包中的路径。
不过这样没法创建空目录。一方面,zip格式开始就没有定义空目录,后来的标准和软件都是通过加一个/结尾的0大小文件来实现的。这时,就需要先在nginx中做一个internal的0大小文件,比如位于/_0。然后输出
printf("%s%d%s%s\n","00000000",0,"/_0",$path."/");
如果要支持中文路径,可以使用X-Archive-Charset:utf8这样的响应头,内容为你输出的编码。nginxzip模块会按标准转换成utf8的标准格式。不过各个软件对这个zip的标准支持不一,比如windows的zip目录就不支持,只能以gbk编码直接输出。其他软件对编码支持效果也各不相同。测试过的winrar,7zip,windowszip目录中,winrar倒是都可以很好支持。7zip可能会把部分中文空目录变成0大小文件。所以,这点还需要自己斟酌处理。
相关文章
- windows搭建php环境_如何安装php环境
- php打包文件并下载
- PHP实现将数组插入MySQL数据库(php数组插入mysql)
- Linux系统下搜索PHP文件的技巧(linux查找php文件)
- 借助 PHP 与 MySQL 轻松实现文件下载(php和mysql下载)
- MySQL与PHP搭配实现助力资源快速下载(mysqlphp下载)
- MySQL事务处理流程及PHP实现(mysql事务php)
- PHP如何准确获取MySQL数据库中的错误信息?(php获取mysql错误)
- PHP读取MSSQL数据库:实现简单快捷的网页查询(php读取mssql网页)
- PHP与MSSQl的兼容性探索(php mssql 兼容)
- Linux下轻松执行PHP文件的方法(linux执行php文件)
- php实现的遍历文件夹下所有文件,编辑删除
- PHP开发环境配置(ZendServer安装)
- 《PHP编程最快明白》第五讲:php目录、文件操作
- PHP以指定字段为索引返回数据库所取的数据数组
- PHP伪静态技术原理以及突破原理实现介绍
- php读取文件头判断文件类型的实现代码
- 如何使用PHP批量去除文件UTF8BOM信息
- php的sprintf函数的用法控制浮点数格式
- php读取excel文件示例分享(更新修改excel)
- apache+php上传大文件以上传100M为例
- php读取目录所有文件信息dir示例
- php常用文件操作函数汇总
- 配置php.ini实现PHP文件上传功能
- PHP中读取文件的8种方法和代码实例