background image

php 文件打包 下载之使用 PHP 自带的 ZipArchive 压缩文件并下载打包好的文件

php 文件打包 下载之使用 PHP 自带的 ZipArchive 压缩文件并下载打包好的文件
总结:

                     

 
使用

PHP 下载文件的操作需要给出四个 header(),可以参考我的另一篇博文:PHP 如何实

现下载功能超详细流程分析

 

计算文件的大小的时候,并不需要先打开文件,通过

filesize

(

$filename

)就可以看出,如果

需要先打开文件的话,

filesize

可能就会是这样的形式了

filesize

(

$filehandle

向客户端回送数据的是,记得要设置一个

buffer,用来指定每次向客户端输出多少数据,

如:

$buffer

=1023。如果不指定的话,就会将整个文件全部写入内存当中,再一次性的讲数

据传送给客户端

 

通过

feof

()函数,可以判断要读取的文件是否读完,如果还没读完,继续读取文件

(

$file_data

=

fread

()),并将数据回送给客户端(

echo

 

$file_data

每次下载完成后,在客户端都会刷新下,说明了,其实每次都将数据写入到一个临时文件
中,等全部下载完成后,再将所有的数据重新整合在一起

 

这里我使用的是绝对路径,绝对路径有个好处,就是适应性比较强,而且相对于相对路径,
效率更高(免去了查找文件的过程)

 

分析下技术要点:

                              

 
将文件打包成

zip 格式 

 
下载文件的功能

 

 
要点解析:

 

 
这里我采用的是

php 自带的 ZipArchive 类 

    

a) 我们只需要

new

一个

ZipArchive 对象,然后使用 open 方法创建一个 zip 文件,

接着使用

addFile 方法,将要打包的文件写入刚刚创建的 zip 文件中,最好还得记得关闭该

对象。

 

 
    

b) 注意点:使用 open 方法的时候,第二个参数

$flags

是可选的,

$flags

用来指定

对打开的

zip 文件的处理方式,共有四种情况 

 
 

 i. ZIPARCHIVE::OVERWRITE 总是创建一个新的文件,如果指定的 zip 文件存在,则会

覆盖掉

 

 
ii. ZIPARCHIVE::CREATE 如果指定的 zip 文件不存在,则新建一个 
 
iii. ZIPARCHIVE::EXCL 如果指定的 zip 文件存在,则会报错 
 
iv. ZIPARCHIVE::CHECKCONS