当前位置: 首页> 最新文章列表> 【PHP修改Zip压缩包中文件属性的完整方法详解】

【PHP修改Zip压缩包中文件属性的完整方法详解】

M66 2025-06-10

PHP ZipArchive 简介

ZipArchive 是 PHP 提供的一个扩展库,用于操作 ZIP 格式的压缩文件。通过它,我们可以创建、读取、更新甚至修改压缩包中文件的属性,如文件权限和修改时间等。

加载压缩包并初始化对象

在操作之前,首先需要实例化一个 ZipArchive 对象,并加载目标 ZIP 文件:


$zip = new ZipArchive();
$zip->open('example.zip');

读取压缩文件的原始属性

可以使用 statIndex() 方法获取压缩包中某个文件的详细属性信息,如文件名、原始大小、修改时间和权限:


$fileIndex = 0; // 假设目标文件在压缩包中的第一个索引位置
$fileInfo = $zip->statIndex($fileIndex);

echo "文件名: " . $fileInfo['name'] . "\n";
echo "压缩前的文件大小: " . $fileInfo['size'] . " 字节\n";
echo "最后修改时间: " . date('Y-m-d H:i:s', $fileInfo['mtime']) . "\n";
echo "权限: " . $fileInfo['external'] . "\n";

修改文件属性:权限与时间戳

使用 setExternalAttributesIndex() 方法可以修改压缩包中文件的属性,包括权限和修改时间。以下是具体的操作方式:


$newPermissions = 0777; // 设置为最高权限
$newModifiedTime = time(); // 设置为当前时间

$zip->setExternalAttributesIndex($fileIndex, ($newPermissions << 16) | ($newModifiedTime & 0xFFFF));

// 再次验证属性修改是否生效
$fileInfo = $zip->statIndex($fileIndex);
echo "修改后的文件权限: " . $fileInfo['external'] . "\n";
echo "修改后的最后修改时间: " . date('Y-m-d H:i:s', $fileInfo['mtime']) . "\n";

保存压缩包并关闭对象

完成属性修改后,记得调用 close() 方法来保存更改并释放资源:


$zip->close();

总结

借助 PHP 的 ZipArchive 扩展,我们可以便捷地对 ZIP 压缩包中文件进行属性修改,包括读取和设置文件权限、最后修改时间等关键元数据。通过 statIndex 读取原始属性,使用 setExternalAttributesIndex 更新信息,配合 close 完成保存,就可以轻松完成压缩文件的操作任务。