當前位置: 首頁> 最新文章列表> 讀取Zip 文件中的特定類型文件(如.txt)

讀取Zip 文件中的特定類型文件(如.txt)

M66 2025-06-05

在PHP 中處理Zip 文件,尤其是提取特定類型的文件(如.txt文本文件),可以通過ZipArchive類或者更底層的zip_read函數來完成。儘管ZipArchive更為現代且使用方便,但zip_read依然在某些舊版本或特殊場景中具有價值。本文將介紹如何利用zip_read來讀取Zip 文件中所有的.txt文件內容。

前置準備

首先,確保你的PHP 環境中已啟用zip擴展。在php.ini中檢查是否包含如下行:

 extension=zip

你也可以通過執行以下PHP 代碼來檢查:

 <?php
if (!function_exists('zip_open')) {
    die("ZIP 擴展未啟用!");
}
?>

示例代碼:讀取所有.txt文件

下面是一個完整示例,演示如何打開一個Zip 文件,遍歷其中所有條目,並僅讀取擴展名為.txt的文件內容。

 <?php
$zipFile = '/path/to/archive.zip'; // 替換為實際路徑

$zip = zip_open($zipFile);
if (is_resource($zip)) {
    while ($entry = zip_read($zip)) {
        $fileName = zip_entry_name($entry);
        // 只處理 .txt 文件
        if (pathinfo($fileName, PATHINFO_EXTENSION) === 'txt') {
            if (zip_entry_open($zip, $entry, 'r')) {
                echo "讀取文件: $fileName\n";
                $contents = zip_entry_read($entry, zip_entry_filesize($entry));
                echo "內容如下:\n$contents\n\n";
                zip_entry_close($entry);
            }
        }
    }
    zip_close($zip);
} else {
    echo "無法打開 ZIP 文件。\n";
}
?>

安全建議

  1. 路徑驗證zip_entry_name()返回的文件路徑可能包含目錄結構或嘗試進行路徑遍歷,使用時務必驗證其安全性。

  2. 限制讀取大小:某些.txt文件可能非常大,應當在zip_entry_read()時進行限制讀取,以防止內存溢出。

  3. 錯誤處理:上面的代碼沒有加入完整的錯誤處理邏輯,在生產環境中應根據具體情況添加日誌和異常處理機制。

示例應用場景

假設你正在開發一個在線批量處理平台,允許用戶上傳包含多個.txt文件的Zip 包,並對內容進行統計或格式轉換。通過上述方法可以方便地提取文本內容,然後調用後續處理邏輯。

你可以將這個邏輯整合到上傳處理腳本中,例如:

 $uploadedZip = $_FILES['file']['tmp_name'];
// 對上傳文件進行檢查後調用讀取函數
processTxtFilesFromZip($uploadedZip);

結合上傳表單及安全校驗功能,一個簡單的Zip 文件處理平台就可以構建完成。訪問https://m66.net/tools/zip-reader來獲取更多此類工具的實際演示和源碼參考。

小結

儘管zip_read接口相較於ZipArchive使用略顯繁瑣,但在對Zip 文件進行精細操作時依然具有參考價值。通過合理組合zip_readzip_entry_*系列函數,可以靈活讀取指定類型文件如.txt ,用於各種自動化處理和後台批量任務。