PHP中ZIP归档操作:ZipArchive与压缩库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP中ZIP归档操作简介

ZIP归档仍然是Web开发中最流行的数据压缩格式之一。在PHP中,通过Zip扩展原生支持其操作,该扩展提供了强大的ZipArchive类。这使得开发人员无需安装额外的第三方库即可轻松创建、读取、更新和从归档中提取文件。



在教育门户网站PythonLib.ru上,我们将全面解析PHP中ZIP操作的所有方面:从基本操作到高级技术,包括密码压缩、大数据量处理以及与输出缓冲的集成。



Zip扩展的安装与检查

从PHP 5.2.0版本开始,ZipArchive类即可使用。要使用它,需要确保服务器配置中已启用zip扩展。可以通过phpinfo()函数或简单的脚本来检查:



<?phpif (class_exists('ZipArchive')) {    echo "Zip扩展可用";} else {    echo "Zip扩展未安装";}?>


在大多数现代主机中,该扩展已预装。如果没有,请联系服务器管理员或通过包管理器安装(例如,对于Debian/Ubuntu系统,使用apt-get install php-zip)。



ZipArchive的基本操作

1. 创建新的ZIP归档

使用带有ZipArchive::CREATE标志的open()方法来创建归档。看一个基本示例:



<?php$zip = new ZipArchive();$filename = 'example.zip';

if ($zip->open($filename, ZipArchive::CREATE) === TRUE) { // 从字符串添加文件 $zip->addFromString('hello.txt', '你好,世界!'); // 添加现有文件 $zip->addFile('/path/to/image.jpg', 'images/photo.jpg'); // 添加空目录 $zip->addEmptyDir('documents'); $zip->close(); echo "归档创建成功";} else { echo "创建归档失败";}?>


请注意:addFile()的第二个参数指定了归档内的路径,这有助于组织文件夹结构。



2. 解压ZIP归档

使用extractTo()方法提取所有文件:



<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) {    $zip->extractTo('/destination/folder/');    $zip->close();    echo "归档已解压";} else {    echo "无法打开归档";}?>


也可以只提取特定文件,将其内部路径作为第二个参数传入:

$zip->extractTo('/destination/', 'images/photo.jpg');


3. 不解压读取归档内容

有时只需要查看归档内的文件列表:



<?php$zip = new ZipArchive();if ($zip->open('archive.zip') === TRUE) {    for ($i = 0; $i < $zip->numFiles; $i++) {        $stat = $zip->statIndex($i);        echo "文件: " . $stat['name'] . " (大小: " . $stat['size'] . " 字节)";    }    $zip->close();}?>


statIndex()方法返回一个包含信息的数组:名称、大小、修改日期、CRC32以及其他元数据。



高级功能

密码压缩 (PHP 7.2+)

从PHP 7.2开始,ZipArchive支持通过AES-256算法进行密码加密:



<?php$zip = new ZipArchive();if ($zip->open('protected.zip', ZipArchive::CREATE) === TRUE) {    $zip->setPassword('supersecret');    $zip->addFile('document.pdf');    // 为最后添加的文件启用加密    $zip->setEncryptionName('document.pdf', ZipArchive::EM_AES_256);    $zip->close();    echo "已创建加密归档                    

推荐