TbsZip:强大的phpZip类

TbsZip:强大的phpZip类

网上找了很多关于php生成zip的文章。不过,选择了一下,最后决定用这个

TbsZip使用很方便,而且对中文的支持不错(据我测试没有乱码)

下载:百度云 密码: qta3

初始化

首先引入tbszip并初始化

require('tbszip.php');
$zip=new clsTbsZip();

接下来新建一个zip:

$zip->CreateNew();

或者打开已存在的zip

$zip->Open('file.zip');

写入zip

增加文件

使用FileAdd方法可以向zip写入文件,例如:

$zip->FileAdd('text.txt','This is a text',TBSZIP_STRING);
$zip->FileAdd('document/text.txt','This is a text',TBSZIP_STRING);
$zip->FileAdd('image.png','./images/image.png',TBSZIP_FILE);

这里解释一下,第三个参数表示的意思是,到底是从文件内容读取,还是直接给定字符串。他们之间的区别,后面再讲

如果不需要压缩,可以将第四个参数指定为FALSE,例如:

$zip->FileAdd('image.png','./images/image.png',TBSZIP_FILE,FALSE);

替换文件

使用FileReplace方法可以向zip替换文件,例如:

$zip->FileReplace('text.txt','This is a text',TBSZIP_STRING);
$zip->FileReplace('image.png','./images/image.png',TBSZIP_FILE);

和FileAdd类似。如果不需要压缩,则第四个参数为FALSE

$zip->FileReplace('image.png','./images/image.png',TBSZIP_FILE,FALSE);

删除文件

使用FileReplace即可删除文件。将第二个参数设置为FALSE即可。例如:

$zip->FileReplace('image.png',FALSE);

撤销更改

PS:这里的更改是指添加、替换和删除

使用FileCancelModif即可简单的撤销,例如:

$zip->FileCancelModif('image.png');

读取zip

文件列表

打开zip后,TbsZip已经将文件列表放到了$zip->CdFileLst里。文件结构以JSON方式表示出来是:

[
    {
        "vers_used": 31,
        "vers_necess": 20,
        "purp": "b:0000000000000000",
        "meth": 8,
        "time": 35491,
        "date": 17730,
        "crc32": 119164459, //很奇怪,和我在WinRAR下看到的CRC32不一样
        "l_data_c": 3218, //压缩后的大小,单位:字节
        "l_data_u": 9512, //压缩前的大小,单位:字节
        "l_name": 19, //文件名长度。注意,如果是目录,则会比实际多一个字符
        "l_fields": 36,
        "l_comm": 0,
        "disk_num": 0,
        "int_file_att": 0,
        "ext_file_att": 8224,
        "p_loc": 0,
        "v_name": "文件名", //例如dir/aaa.txt。如果是目录,则结尾会有一个/,例如:dir/
        "v_fields": 乱码,
        "v_comm": "",
        "bin": 乱码,
    ),{
    ……
    }
]

这个Array你除了可以用来遍历文件以外,还可以用来获取文件数目,例如:

$num=count($zip->CdFileLst);

判断文件是否存在

使用FileExists判断,例如:

var_dump($zip->FileExists('text.txt'));

读取文件内容

使用FileRead即可读取,例如:

$text=$zip->FileRead('text.txt');
$text=$zip->FileRead('dir/text.txt');

输出

修改完成,当然要输出了。有两个方法输出

1.写入到文件

$zip->Flush(TBSZIP_FILE,'new_archive.zip');

没什么好解释的,一看就懂

2.直接下载

$zip->Flush(TBSZIP_DOWNLOAD,'download.zip');

如果要自定义Content-Type,可以这样做:

$zip->Flush(TBSZIP_DOWNLOAD,'download.zip','application/zip');

如果所有header都想自己写,那么这样做:

//首先输出header
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=download.zip");
//输出zip文件
$zip->Flush(TBSZIP_DOWNLOAD+TBSZIP_NOHEADER);

最后的操作

最后,你得关闭掉

$zip->Close();

小结

zd432的站长开通新浪微博了,各位可以去围观下。反正我是经常去那里下软件