php_ref_zip
PHP Zip 函数 (ZipArchive 类)
Section titled “PHP Zip 函数 (ZipArchive 类)”PHP Zip 扩展介绍
Section titled “PHP Zip 扩展介绍”PHP 的 Zip 扩展允许你在脚本中直接创建、读取和修改 ZIP 压缩包。与 ZIP 文件交互的主要方式是通过面向对象的 ZipArchive 类。
安装 / 启用扩展
Section titled “安装 / 启用扩展”Zip 扩展通常包含在 PHP 中,但可能并非在所有 PHP 安装中默认启用。
- Linux 系统(使用包管理器): 通常通过
php-zip(Debian/Ubuntu)或php-pecl-zip(CentOS/RHEL)等包安装。示例:sudo apt-get install php-zip或sudo yum install php-pecl-zip。之后可能需要重启你的 Web 服务器(Apache/Nginx)和 PHP-FPM。 - Windows 系统:
php_zip.dll文件应已包含在你的 PHP 发布版本中。你需要编辑php.ini文件,通过取消注释或添加以下行来启用它:extension=zip。确保php.ini中的extension_dir指令指向包含 DLL 文件的目录。重启你的 Web 服务器。 - Docker: 官方 PHP Docker 镜像通常需要在 Dockerfile 中安装扩展。示例说明通常可以在 PHP 镜像的 Docker Hub 页面上找到。
- 检查: 你可以在终端中运行
php -m或查看phpinfo();的输出来验证扩展是否已启用(查找 ‘zip’ 部分)。
请查阅你特定操作系统或托管环境的文档以获取精确步骤。
使用 ZipArchive 类
Section titled “使用 ZipArchive 类”ZipArchive 类提供了处理 ZIP 文件的方法。
通用工作流程:
- 创建一个
ZipArchive对象:$zip = new ZipArchive(); - 打开一个现有 ZIP 文件或创建一个新文件:
$zip->open('myarchive.zip', ZipArchive::CREATE); - 执行操作:添加文件 (
addFile())、添加目录 (addEmptyDir())、解压文件 (extractTo())、获取信息 (numFiles、statIndex()) 等。 - 关闭压缩包以保存更改:
$zip->close();
示例:创建 Zip 压缩包
Section titled “示例:创建 Zip 压缩包”<?php$zip = new ZipArchive();$filename = "./my_new_archive.zip";
// 以创建或覆盖模式打开压缩包if ($zip->open($filename, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) { // 使用文件路径添加文件 // 第二个参数是文件在压缩包内的名称 if (file_exists('file1.txt')) { $zip->addFile('file1.txt', 'document.txt'); }
// 从字符串添加文件 $zip->addFromString('generated.txt', 'This content was generated on the fly.');
// 添加一个空目录 $zip->addEmptyDir('new_folder');
// 添加目录中的所有文件(递归示例) $sourceDir = './files_to_zip'; // 包含文件的目录 if (is_dir($sourceDir)) { $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($sourceDir, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::LEAVES_ONLY );
foreach ($files as $name => $file) { // 跳过目录(它们会自动添加) if (!$file->isDir()) { $filePath = $file->getRealPath(); // 获取相对路径,以便正确存储在 zip 中 $relativePath = substr($filePath, strlen($sourceDir) + 1); $zip->addFile($filePath, $relativePath); } } }
// 关闭并保存压缩包 $zip->close(); echo 'Archive created successfully.';} else { echo 'Failed to create the archive.';}?>示例:解压 Zip 压缩包
Section titled “示例:解压 Zip 压缩包”<?php$zip = new ZipArchive();$filename = "./my_new_archive.zip";$extractToPath = "./extracted_files";
// 以读取模式打开压缩包if ($zip->open($filename) === TRUE) { // 如果解压目录不存在则创建 if (!is_dir($extractToPath)) { mkdir($extractToPath, 0755, true); }
// 将所有内容解压到指定路径 if ($zip->extractTo($extractToPath)) { echo 'Archive extracted successfully.'; } else { echo 'Failed to extract archive.'; }
// 关闭压缩包 $zip->close();} else { echo 'Failed to open the archive.';}?>示例:读取压缩包中的文件列表
Section titled “示例:读取压缩包中的文件列表”<?php$zip = new ZipArchive();$filename = "./my_new_archive.zip";
if ($zip->open($filename) === TRUE) { echo "Archive '{$filename}' contains: " . $zip->numFiles . " files/directories.\n"; echo "-------------------------------------\n";
for ($i = 0; $i < $zip->numFiles; $i++) { $stats = $zip->statIndex($i); if (!$stats) continue;
echo "Name: " . $stats['name'] . "\n"; echo "Size (uncompressed): " . $stats['size'] . " bytes\n"; // 大小 (未压缩) echo "Size (compressed): " . $stats['comp_size'] . " bytes\n"; // 大小 (已压缩) echo "-------------------------------------\n"; }
$zip->close();} else { echo 'Failed to open the archive.';}?>ZipArchive 关键方法
Section titled “ZipArchive 关键方法”以下是一些常用的方法:
请查阅PHP 官方 ZipArchive 文档以获取完整列表和详细说明。