在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);
?>
zip_open()支持本地文件路徑,遠程URL支持依賴於PHP的allow_url_fopen設置,如果遠程打開失敗建議先將ZIP文件下載到本地再操作。
讀取二進製文件內容時,直接輸出可能會導致亂碼或頁面異常,建議按需求處理數據。