當前位置: 首頁> 最新文章列表> zip_open() + zip_read() + zip_entry_read() 的完整示例

zip_open() + zip_read() + zip_entry_read() 的完整示例

M66 2025-06-06

在PHP中,處理ZIP文件通常使用zip_open()zip_read()zip_entry_read()這幾個函數。它們允許我們打開ZIP文件,遍歷其中的文件條目,並讀取文件內容。本文將通過一個完整示例,講解如何用這三個函數來讀取ZIP文件。


一、函數簡介

  • zip_open($filename)
    打開一個ZIP文件,返回一個資源句柄。

  • zip_read($zip)
    讀取ZIP文件中的下一個條目,返回一個ZIP條目資源。

  • zip_entry_read($entry, $length)
    讀取ZIP條目中的內容,最多讀取指定字節數。

  • zip_entry_name($entry)
    獲取當前ZIP條目的文件名。

  • zip_close($zip)
    關閉ZIP文件資源。


二、完整示例代碼

下面的示例演示瞭如何打開ZIP文件,遍歷裡面的所有文件,並將內容輸出到瀏覽器:

 <?php
// ZIP文件路徑(請替換為實際路徑)
$zipFile = 'http://m66.net/path/to/your.zip';

// 打開ZIP文件
$zip = zip_open($zipFile);

if (!$zip || is_numeric($zip)) {
    die("无法打開ZIP文件");
}

echo "<h2>ZIP文件內容列表:</h2>";

while ($entry = zip_read($zip)) {
    // 獲取當前文件名
    $fileName = zip_entry_name($entry);
    echo "<h3>文件名: $fileName</h3>";

    // 打開ZIP條目
    if (zip_entry_open($zip, $entry)) {
        $fileSize = zip_entry_filesize($entry);
        $content = '';

        // 按塊讀取文件內容(每次最多1024位元組)
        while ($data = zip_entry_read($entry, 1024)) {
            $content .= $data;
        }

        // 關閉當前ZIP條目
        zip_entry_close($entry);

        // 輸出文件內容(這裡簡單以文本形式輸出,注意可能包含二進制數據)
        echo "<pre>" . htmlspecialchars($content) . "</pre>";
    } else {
        echo "无法打開文件條目: $fileName<br>";
    }
}

// 關閉ZIP文件
zip_close($zip);
?>

三、注意事項

  1. zip_open()支持本地文件路徑,遠程URL支持依賴於PHP的allow_url_fopen設置,如果遠程打開失敗建議先將ZIP文件下載到本地再操作。

  2. 讀取二進製文件內容時,直接輸出可能會導致亂碼或頁面異常,建議按需求處理數據。