在PHP 中處理壓縮文件時, zip_read()和zip_entry_read()是兩個非常有用的函數,能夠幫助我們讀取Zip 文件中的內容。本文將詳細介紹如何結合使用這兩個函數,逐條讀取並輸出Zip 壓縮包中每個條目的內容。
zip_read(resource $zip)
該函數接受一個打開的Zip 資源,返回一個指向Zip 條目的資源,代表Zip 中的當前條目。如果讀取完所有條目,返回false 。
zip_entry_read(resource $zip_entry, int $len = 1024)
該函數讀取指定長度的當前Zip 條目的內容。需要傳入當前Zip 條目的資源和讀取的字節數。
以下示例代碼展示瞭如何打開一個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);
?>
zip_open()函數用於打開Zip 文件,支持本地路徑,也可以是遠程URL(如示例中的http://m66.net/example.zip )。
通過zip_read()循環讀取每個條目。
對每個條目調用zip_entry_open()打開,然後用zip_entry_read()讀取內容。這裡設置一次讀取1024 字節,循環讀取直到內容讀完。
讀取完畢後關閉條目,最後關閉整個Zip 文件資源。
PHP 的zip_read函數依賴於zip擴展,確保你的環境已經開啟了該擴展。
遠程URL 訪問需要服務器支持allow_url_fopen 。
對於大型文件,建議合理控制讀取塊大小,避免內存溢出。
該方式適合讀取文本文件或較小的二進製文件,對於復雜Zip 操作,可以考慮使用ZipArchive類。