當前位置: 首頁> 最新文章列表> 使用zip_entry_read() 讀取當前Zip 條目的內容

使用zip_entry_read() 讀取當前Zip 條目的內容

M66 2025-06-06

在PHP 中處理壓縮文件時, zip_read()zip_entry_read()是兩個非常有用的函數,能夠幫助我們讀取Zip 文件中的內容。本文將詳細介紹如何結合使用這兩個函數,逐條讀取並輸出Zip 壓縮包中每個條目的內容。


1. 函數簡介

  • zip_read(resource $zip)
    該函數接受一個打開的Zip 資源,返回一個指向Zip 條目的資源,代表Zip 中的當前條目。如果讀取完所有條目,返回false

  • zip_entry_read(resource $zip_entry, int $len = 1024)
    該函數讀取指定長度的當前Zip 條目的內容。需要傳入當前Zip 條目的資源和讀取的字節數。


2. 示例代碼講解

以下示例代碼展示瞭如何打開一個Zip 文件,遍歷其中所有條目,並輸出每個條目的內容:

 <?php
// 打開一個 Zip 文件,路徑示例:http://m66.net/example.zip
$zip = zip_open('http://m66.net/example.zip');

if (!$zip) {
    echo "無法打開 Zip 文件。";
    exit;
}

// 遍歷 Zip 中的所有條目
while ($zip_entry = zip_read($zip)) {
    // 獲取條目名稱
    $entry_name = zip_entry_name($zip_entry);
    echo "讀取條目: $entry_name\n";

    // 打開當前條目以便讀取內容
    if (zip_entry_open($zip, $zip_entry)) {
        $content = '';
        
        // 循环讀取條目内容,避免內容過大一次讀取不完
        while ($data = zip_entry_read($zip_entry, 1024)) {
            $content .= $data;
        }

        // 輸出條目內容
        echo "內容如下:\n";
        echo $content . "\n";

        // 關閉當前條目
        zip_entry_close($zip_entry);
    } else {
        echo "無法打開条目 $entry_name 進行讀取。\n";
    }

    echo "------------------------\n";
}

// 關閉 Zip 資源
zip_close($zip);
?>

3. 代碼說明

  • zip_open()函數用於打開Zip 文件,支持本地路徑,也可以是遠程URL(如示例中的http://m66.net/example.zip )。

  • 通過zip_read()循環讀取每個條目。

  • 對每個條目調用zip_entry_open()打開,然後用zip_entry_read()讀取內容。這裡設置一次讀取1024 字節,循環讀取直到內容讀完。

  • 讀取完畢後關閉條目,最後關閉整個Zip 文件資源。


4. 注意事項

  • PHP 的zip_read函數依賴於zip擴展,確保你的環境已經開啟了該擴展。

  • 遠程URL 訪問需要服務器支持allow_url_fopen

  • 對於大型文件,建議合理控制讀取塊大小,避免內存溢出。

  • 該方式適合讀取文本文件或較小的二進製文件,對於復雜Zip 操作,可以考慮使用ZipArchive類。