<?php
$zip = zip_open("20101105.zip");
if ($zip) {
while ($zip_entry = zip_read($zip)) {
echo "Name: " . zip_entry_name($zip_entry) . "<br/>";
echo "Actual Filesize: " . zip_entry_filesize($zip_entry) . "<br/>";
echo "Compressed Size: " . zip_entry_compressedsize($zip_entry) . "<br/>";
echo "Compression Method: " . zip_entry_compressionmethod($zip_entry) . "<br/>";
if (zip_entry_open($zip, $zip_entry, "r")) {
echo "File Contents:<br/>";
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
echo htmlspecialchars($buf) . "<br/>"; // 防 XSS
zip_entry_close($zip_entry);
}
echo "<br/>";
}
zip_close($zip);
}
?>
ZipArchive 面向對象 API 更直觀,功能更強(創建、添加、刪除、加密、註釋等),推薦新項目使用。
<?php
$zip = new ZipArchive();
if ($zip->open('20101105.zip') === true) {
for ($i = 0; $i < $zip->numFiles; $i++) {
$stat = $zip->statIndex($i);
echo "Name: {$stat['name']}<br/>";
echo "Size: {$stat['size']}<br/>";
echo "Compressed: {$stat['comp_size']}<br/>";
echo "Method: {$stat['comp_method']}<br/>";
echo "CRC32: {$stat['crc']}<br/>";
echo "<br/>";
// 讀取內容
$content = $zip->getFromIndex($i);
echo "Content: " . htmlspecialchars($content) . "<br/><br/>";
}
$zip->close();
} else {
echo "無法打開 ZIP 文件,錯誤碼: $zip";
}
?>
<?php
$zip = new ZipArchive();
if ($zip->open('backup.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) {
$zip->addFile('data.sql', 'db/data.sql');
$zip->addFromString('readme.txt', '此為自動備份文件,生成時間: ' . date('Y-m-d H:i:s'));
$zip->close();
echo "ZIP 創建成功";
} else {
echo "創建失敗";
}
?>
php_zip 擴展(PHP 7.4+ 內置,舊版需編譯安裝)。$zip->extractTo('/path/')。ZipArchive::FL_ENC_UTF_8 / FL_ENC_CP437 标志。$zip->setEncryptionName(),舊版需借助外部工具。