當前位置: 首頁> 最新文章列表> 【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完成保存,就可以輕鬆完成壓縮文件的操作任務。