当前位置: 首页> 最新文章列表> 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. 读取二进制文件内容时,直接输出可能会导致乱码或页面异常,建议按需求处理数据。