本篇文章带大家介绍PHP的zip压缩工具扩展包。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
总算到了 PHP 的拿手好戏上场了,前面我们学习过 Bzip2 、 LZF 、 Phar 和 rar 这些压缩相关扩展在 PHP 中的使用,不过它们要么是太冷门,要么就是很多功能不支持。而 Zip 则是在 PHP 中得到最大幅度功能支持的热门压缩格式,或者说是通用常见的一种压缩格式。当然,也主要得益于 Zip 也是事实上的 Linux 环境中的通用压缩格式。
安装
对于 PHP 来说,Zip 扩展已经集成在了 PHP 的安装包中,在 Configure 的时候可以直接加上 –with-zip ,如果在安装的时候没有加上这个参数,我们也可以在源码包的 ext/zip 下找到源码,然后通过扩展安装的方式进行安装。
创建一个压缩包
$zip = new ZipArchive(); $filename = './test_zip.zip'; if($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE){ exit('cannot open ' . $filename .'\n'); } // 加入文字类型的文件 $zip->addFromString('testfile1.txt' . time(), "#1"); $zip->addFromString('testfile2.txt' . time(), "#2"); // 加入已存在的文件 $zip->addFile('rar.php', 'newrar.php'); echo $zip->numFiles, PHP_EOL; // 文件数量 echo $zip->status, PHP_EOL; // 压缩包状态 $zip->close(); // 使用操作系统的 unzip 查看 // # unzip -l test_zip.zip // Archive: test_zip.zip // Length Date Time Name // --------- ---------- ----- ---- // 2 07-08-2020 08:57 testfile1.txt1594169845 // 2 07-08-2020 08:57 testfile2.txt1594169845 // 2178 07-07-2020 08:55 newrar2.php // --------- ------- // 2182 3 files
之前学习过的 rar 扩展是无法打包文件或者创建新的压缩包的,而 Zip 一上来我们就学习的是创建一个新的压缩包。通过实例化一个 ZipArchive 对象后,我们就可以使用 open() 函数打开或创建一个压缩包文件。接着,我们使用了两种添加内容的方式。addFromString() 是加入文字类型的文件,也就是将一段文字转换成文本文件保存在这个压缩包中。另外,我们通过 addFile() 来将外部的文件加入到这个压缩包中。
【推荐学习:PHP视频教程】
numFiles 和 status 属性可以分别查看到压缩包文件里面的文件数量及当前这个压缩包的状态信息。最后直接使用 close() 关闭句柄即可。这样,一个简单的 Zip 压缩包文件就创建完成了。我们可以直接使用操作系统的 unzip 命令来查看压缩包的内容。
读取压缩包内容及信息
$zip = new ZipArchive(); $zip->open('./test_zip.zip'); print_r($zip); // 压缩包信息 // ZipArchive Object // ( // [status] => 0 // [statusSys] => 0 // [numFiles] => 40 // [filename] => /data/www/blog/test_zip.zip // [comment] => // ) var_dump($zip); // object(ZipArchive)#2 (5) { // ["status"]=> // int(0) // ["statusSys"<div>本文来*源gaodai^.ma#com搞#代!码网</div><pre>搞gaodaima代码
]=>
// int(0)
// ["numFiles"]=>
// int(40)
// ["filename"]=>
// string(27) "/data/www/blog/test_zip.zip"
// ["comment"]=>
// string(0) ""
// }
echo $zip->numFiles, PHP_EOL;
echo $zip->status, PHP_EOL;
echo $zip->statusSys, PHP_EOL;
echo $zip->filename, PHP_EOL;
echo $zip->comment, PHP_EOL;
echo $zip->count(), PHP_EOL;
for ($i=0; $i<$zip->numFiles;$i++) {
echo "index: $i\n";
// 打印每个文件实体信息
print_r($zip->statIndex($i));
// index: 0
// Array
// (
// [name] => testfile1.txt1594169845
// [index] => 0
// [crc] => 2930664868
// [size] => 2
// [mtime] => 1594169844
// [comp_size] => 2
// [comp_method] => 0
// [encryption_method] => 0
// )
// ……
$entry = $zip->statIndex($i);
if($entry['name'] == 'newrar.php'){
// 仅解压 newrar.php 文件到指定目录
$zip->extractTo('./test_zip_single', $entry['name']);
}
}
// 修改压缩包内的文件名
$zip->renameName('newrar.php', 'newrar2.php');
print_r($zip->getFromIndex(2)); // 获取第二个文件的内容
print_r($zip->getFromName('newrar2.php')); // 获取指定文件名的文件内容
$zip->extractTo('./test_zip'); // 解压整个压缩包到指定目录
$zip->close();