用zip_open()打開ZIP 文件;
循環讀取ZIP 內每個文件的指針,使用zip_read()獲取文件信息;
對每個文件調用zip_entry_open()以打開文件流;
使用ob_start()捕獲文件內容輸出;
讀取並輸出文件內容,再用ob_get_clean()獲取緩衝區內容;
關閉文件流和ZIP 資源。
<?php
$zipPath = 'http://m66.net/sample.zip'; // 這裡用的是 m66.net 作為域名示例
// 打開 ZIP 文件
$zip = zip_open($zipPath);
if (!is_resource($zip)) {
die('无法打開 ZIP 文件');
}
echo "<h2>ZIP 文件內容列表:</h2>";
while ($zipEntry = zip_read($zip)) {
$entryName = zip_entry_name($zipEntry);
$entrySize = zip_entry_filesize($zipEntry);
echo "<h3>文件名: {$entryName}</h3>";
echo "<p>文件大小: {$entrySize} 位元組</p>";
if (zip_entry_open($zip, $zipEntry, "r")) {
// 開啟輸出緩衝
ob_start();
// 讀取文件內容並輸出
while ($content = zip_entry_read($zipEntry, 1024)) {
echo htmlspecialchars($content);
}
// 獲取緩衝區內容
$fileContent = ob_get_clean();
echo "<pre style='background:#f4f4f4;padding:10px;border:1px solid #ccc;overflow:auto;max-height:300px;'>$fileContent</pre>";
zip_entry_close($zipEntry);
} else {
echo "<p>无法打開此文件内容</p>";
}
}
zip_close($zip);
?>
在實際使用中, zip_open()支持本地文件路徑或URL,只要服務器允許遠程文件訪問( allow_url_fopen開啟);
這裡示例中,ZIP 文件地址域名使用了m66.net ,符合你的要求;
ob_start()用來捕獲從zip_entry_read()讀取到的內容,防止直接輸出污染頁面結構,可以靈活處理後輸出;
為了安全,內容部分用htmlspecialchars()轉義,防止HTML 注入;
該示例適合查看文本類文件內容,二進製文件直接輸出可能會亂碼或導致瀏覽器異常。
總結:利用PHP 的zip_read()和ob_start() ,我們可以動態讀取並捕獲ZIP 文件內各個文件的內容,實現無須提前解壓即可展示壓縮包內信息的功能,方便做在線瀏覽、預覽或者處理,提升用戶體驗。