TP里使用PHP自带的Zip扩展压缩文件
Zip扩展能够读取或写入 ZIP 压缩档案及其中的文件。
安装Zip扩展
在Ubuntu下通过apt安装zip扩展,这里以php7.2为例,命令如下
1 |
apt-get install php7.2-zip -y |
更多安装方式见官方:PHP: 安装 - Manual,安装完成后,调用phpinfo查看,如果信息包含以下信息
zip
Zip | enabled |
Zip version | 1.15.4 |
Libzip version | 1.1.2 |
zlib
ZLib Support | enabled |
---|---|
Stream Wrapper | compress.zlib:// |
Stream Filter | zlib.inflate, zlib.deflate |
Compiled Version | 1.2.11 |
Linked Version | 1.2.11 |
Directive | Local Value | Master Value |
---|---|---|
zlib.output_compression | Off | Off |
zlib.output_compression_level | -1 | -1 |
zlib.output_handler | no value | no value |
说明已经安装成功,版本号会有所不同。
ZipArchive 类(部分)
ZipArchive::addEmptyDir — 添加空目录到压缩包
ZipArchive::addEmptyDir(string $dirname, int $flags = 0): bool
ZipArchive::addFile — 通过给出的文件路径添加压缩包
ZipArchive::addFile(
string $filepath,
string $entryname = "",
int $start = 0,
int $length = 0,
int $flags = ZipArchive::FL_OVERWRITE
): bool
ZipArchive::addFromString — 把内容添加到压缩包的文件里
ZipArchive::addFromString(string $name, string $content, int $flags = ZipArchive::FL_OVERWRITE): bool
ZipArchive::close — 关闭当前进程 (打开的或者新建的)
ZipArchive::close(): bool
ZipArchive::extractTo — 解压缩文件
ZipArchive::extractTo(string $pathto, array|string|null $files = null): bool
ZipArchive::open — 打开或新建压缩文件
ZipArchive::open(string $filename, int $flags = 0): bool|int
ZipArchive::setPassword — 设置解压缩密码
ZipArchive::setPassword(string $password): bool
ZipArchive::renameName — 压缩包里的文件重命名
ZipArchive::renameName(string $name, string $new_name): bool
更多类说明参考官网PHP: Zip - Manual
TP使用Zip示例
首先要打开或者新建一个压缩文件,命令如下
1 2 3 |
$zip = new \ZipArchive(); $zippath=$_SERVER['DOCUMENT_ROOT'].'/'; $flag = $zip->open($zippath.'out.zip', \ZipArchive::CREATE|\ZipArchive::OVERWRITE); |
新建一个Zip类赋值给$zip,$zippath为当前站点根目录,$flag为创建或打开zip文件返回bool值,成功返回为True。创建成功并操作完成后会在根目录下生成一个out.zip文件。
添加文件、内容及文件改名并生成压缩包的完整示例,命令如下
1 2 3 4 5 6 7 8 9 10 11 12 |
$zip = new \ZipArchive(); $zippath=$_SERVER['DOCUMENT_ROOT'].'/'; $res= $zip->open($zippath.'out.zip', \ZipArchive::CREATE|\ZipArchive::OVERWRITE); if($res === True){ $zip->addFromString('test.txt', '这是一个测试文本'); $zip->addFile('data.txt', 'entryname.txt'); $zip->renameName('entryname.txt','newname.txt'); $zip->close(); echo '成功'; }else{ echo '失败, 错误代码:' . $res; } |
添加文件的时候也可以直接重名文件名。
到这里,TP基于Zip扩展创建压缩文件完成了。