W3docs

zip_entry_open()

A função zip_entry_open() do PHP abre uma entrada em um arquivo zip para leitura. Descontinuada no PHP 7.4 e removida no PHP 8.0.

⚠️ Aviso de Descontinuação: A função zip_entry_open() pertence à extensão zip legada, que foi descontinuada no PHP 7.4 e removida no PHP 8.0. Os exemplos abaixo são fornecidos apenas como referência histórica. Para aplicações PHP modernas, use a classe ZipArchive.

zip_entry_open() prepara uma única entrada (arquivo) dentro de um arquivo zip aberto para que seu conteúdo possa ser lido. Ela funciona em conjunto com zip_open(), zip_read() e zip_entry_read(): você abre o arquivo zip, itera até uma entrada, abre essa entrada e então lê a partir dela. Sem chamar zip_entry_open() primeiro, uma chamada a zip_entry_read() não terá nada para ler.

Esta página aborda a assinatura da função, seus parâmetros e valor de retorno, um exemplo completo de leitura de uma entrada e — o mais importante — o substituto moderno ZipArchive que você deve usar hoje.

Sintaxe

resource zip_entry_open(resource $zip, resource $zip_entry, string $mode = "r")

Parâmetros

ParâmetroDescrição
$zipO identificador do arquivo retornado por zip_open().
$zip_entryUm identificador de entrada retornado por zip_read().
$modeO modo de acesso. A extensão zip legada suportava apenas acesso de leitura, portanto este é efetivamente sempre "r".

O quarto argumento $password visto em algumas referências antigas nunca foi funcional na extensão zip embutida; ele é ignorado.

Valor de retorno

Retorna true em caso de sucesso ou false em caso de falha. Apesar da dica de tipo histórica resource, você não obtém um novo identificador de volta — você continua passando o mesmo identificador $zip_entry para zip_entry_read().

Exemplo de Uso

Exemplo: Lendo um arquivo de um arquivo zip

Abra o arquivo zip, avance até uma entrada, abra essa entrada, leia-a e limpe:

$zip = zip_open("example.zip");

if (is_resource($zip)) {
    while ($zip_entry = zip_read($zip)) {
        // Prepare this entry for reading
        if (zip_entry_open($zip, $zip_entry, "r")) {
            $name     = zip_entry_name($zip_entry);
            $contents = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));

            echo "$name: $contents\n";

            zip_entry_close($zip_entry);
        }
    }
    zip_close($zip);
}

Aqui zip_open() abre o arquivo zip, zip_read() avança para cada entrada, zip_entry_open() torna a entrada atual legível e zip_entry_read() retorna seus bytes. Sempre combine cada abertura bem-sucedida com zip_entry_close(), e feche o arquivo zip com zip_close() quando terminar.

Alternativa Moderna: Classe ZipArchive

Para obter o mesmo resultado no PHP 8.0+, use a classe ZipArchive embutida:

$zip = new ZipArchive;

if ($zip->open('example.zip') === true) {
    // Loop over every entry by index
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $name     = $zip->getNameIndex($i);
        $contents = $zip->getFromIndex($i);

        echo "$name: $contents\n";
    }
    $zip->close();
}

ZipArchive não precisa de uma etapa separada de "abrir a entrada": getFromIndex() (ou getFromName()) lê o conteúdo de uma entrada diretamente, e funciona em todas as versões modernas do PHP.

Conclusão

Neste artigo, discutimos a função PHP zip_entry_open() e como ela pode ser usada para abrir um arquivo em um arquivo zip. Explicamos o que a função faz, sua sintaxe e fornecemos um exemplo de como ela pode ser usada em um cenário prático. Note que zip_entry_open() foi descontinuada e removida no PHP 8.0; para projetos modernos, use a classe ZipArchive para abrir e ler arquivos em um arquivo zip.

Prática

Prática
O que a função ZipEntry::open() faz em PHP?
O que a função ZipEntry::open() faz em PHP?
Was this page helpful?