W3docs

zip_entry_filesize()

A função zip_entry_filesize() é uma função nativa do PHP usada para obter o tamanho descomprimido de um arquivo em um arquivo zip.

A função zip_entry_filesize() era uma função nativa do PHP que retornava o tamanho descomprimido (original), em bytes, de um único arquivo dentro de um arquivo zip. Ela funcionava em conjunto com a antiga API zip procedural (zip_open(), zip_read() e zip_entry_open()).

Aviso

zip_entry_filesize() foi descontinuada no PHP 8.0 e removida no PHP 8.1. Ela não existe no PHP moderno. Novos códigos devem usar a classe ZipArchive — esta página mostra a abordagem equivalente e suportada.

O que significa "tamanho descomprimido"

Um arquivo zip armazena dois tamanhos para cada entrada:

  • Tamanho descomprimido — o tamanho do arquivo após a extração (o que zip_entry_filesize() retornava, e o que ZipArchive::statName() expõe como size).
  • Tamanho comprimido — quantos bytes a entrada ocupa de fato dentro do arquivo após a compressão. Na API procedural, isso era zip_entry_compressedsize(); com ZipArchive, é o campo comp_size.

Conhecer o tamanho descomprimido antecipadamente é útil para exibir tamanhos de download aos usuários, verificar se há espaço em disco suficiente para extrair ou validar um upload antes de descompactá-lo.

Sintaxe legada

Para referência, a assinatura original era:

int zip_entry_filesize(resource $zip_entry)

Onde $zip_entry é um identificador de entrada zip retornado por zip_read(). Ela retornava o tamanho descomprimido da entrada em bytes. Como a função não existe mais, não a utilize em novos códigos.

A substituição moderna: ZipArchive::statName()

A maneira suportada de ler o tamanho descomprimido de uma entrada é ZipArchive::statName(), que retorna um array associativo de metadados (ou false se a entrada não for encontrada). A chave size contém o tamanho descomprimido.

$zip = new ZipArchive();
if ($zip->open('example.zip') === true) {
    $stat = $zip->statName('file.txt');
    if ($stat !== false) {
        echo "The uncompressed size of the file is: " . $stat['size'] . " bytes.";
    } else {
        echo "File not found in archive.";
    }
    $zip->close();
} else {
    echo "Failed to open archive.";
}

statName() busca uma entrada pelo seu caminho dentro do arquivo. Se você tiver apenas um índice (por exemplo, ao percorrer com numFiles), use statIndex() — ele retorna o mesmo formato de array.

Comparando tamanho comprimido e descomprimido

Como o array stat contém ambos os números, é possível reportar a taxa de compressão em uma única passagem — sem chamadas separadas como o antigo par zip_entry_filesize() / zip_entry_compressedsize():

$zip = new ZipArchive();
if ($zip->open('example.zip') === true) {
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $stat = $zip->statIndex($i);
        $saved = $stat['size'] > 0
            ? round(100 * (1 - $stat['comp_size'] / $stat['size']))
            : 0;
        echo "{$stat['name']}: {$stat['size']} bytes -> {$stat['comp_size']} bytes ({$saved}% saved)\n";
    }
    $zip->close();
} else {
    echo "Failed to open archive.";
}

Armadilhas comuns

  • Verifique o valor de retorno. open() retorna true em caso de sucesso ou um código de erro (um inteiro) em caso de falha, portanto compare com === true, não com uma verificação de verdadeiro simples. statName() retorna false para uma entrada ausente.
  • size é o valor descomprimido. Um erro comum é assumir que é o tamanho no disco dentro do zip — isso é comp_size.
  • Diretórios também são entradas. Ao percorrer com statIndex(), entradas de diretório aparecem com uma / no final e um size de 0.

Conclusão

zip_entry_filesize() foi removida no PHP 8.1, portanto não deve aparecer em novos códigos. Sua função — ler o tamanho descomprimido de uma entrada — agora é tratada por ZipArchive::statName() (ou statIndex()), cujo campo size fornece o mesmo valor ao mesmo tempo que expõe comp_size para o tamanho comprimido. Consulte a visão geral de ZipArchive e filesize() para outros utilitários relacionados a tamanho de arquivo.

Prática

Prática
Qual é o papel da função zip_entry_filesize() no PHP?
Qual é o papel da função zip_entry_filesize() no PHP?
Was this page helpful?