首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 讀取 ZIP 文件詳細信息與解壓演示

     編輯:PHP 相關知識

ZIP 擴展核心函數

  • zip_open($filename):打開 ZIP 歸檔,返回資源句柄或錯誤碼。
  • zip_read($zip):讀取下一個條目,返回 zip_entry 資源或 false。
  • zip_entry_name($zip_entry):獲取條目名稱(含相對路徑)。
  • zip_entry_filesize($zip_entry):未壓縮大小(字節)。
  • zip_entry_compressedsize($zip_entry):壓縮後大小。
  • zip_entry_compressionmethod($zip_entry):壓縮方法代碼。
  • zip_entry_open($zip, $zip_entry, $mode):打開條目讀取,mode 通常為 "r"。
  • zip_entry_read($zip_entry, $length):讀取條目內容。
  • zip_entry_close($zip_entry):關閉條目。
  • zip_close($zip):關閉歸檔。

完整遍歷並輸出信息範例

<?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 類 (PHP 5.2+)

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";
}
?>

創建 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/')。
  • 中文文件名編碼問題:舊 ZIP 可能用 GBK,新版 ZipArchive 支持 ZipArchive::FL_ENC_UTF_8 / FL_ENC_CP437 标志。
  • 加密 ZIP:PHP 7.2+ 支持 $zip->setEncryptionName(),舊版需借助外部工具。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved