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()).
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 queZipArchive::statName()expõe comosize). - 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(); comZipArchive, é o campocomp_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()retornatrueem 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()retornafalsepara 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 umsizede0.
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.