zip_entry_compressedsize()
A função zip_entry_compressedsize() do PHP retorna o tamanho comprimido de uma entrada em um arquivo zip. Saiba como usá-la e qual é a alternativa moderna.
A função zip_entry_compressedsize() é uma função legada da extensão zip do PHP. Ela retorna o tamanho comprimido de uma única entrada dentro de um arquivo zip aberto — ou seja, o número de bytes que o arquivo ocupa no disco após a compressão, que geralmente é menor do que o seu tamanho original.
Esta página explica o que a função retornava, como era usada e — mais importante — o que usar no lugar dela, pois a função foi descontinuada no PHP 7.4 e removida no PHP 8.0. Em qualquer instalação moderna do PHP (8.0 ou posterior), chamá-la gera um Error fatal, portanto utilize a classe ZipArchive mostrada abaixo.
Por que o tamanho comprimido é importante
Cada arquivo armazenado em um arquivo zip possui dois tamanhos:
- Tamanho não comprimido — o comprimento original do arquivo em bytes. Veja
zip_entry_filesize(). - Tamanho comprimido — o comprimento em bytes após o algoritmo deflate reduzi-lo. Isso é o que
zip_entry_compressedsize()retornava.
Comparar os dois informa a taxa de compressão. Textos altamente comprimíveis podem encolher para 20% do tamanho original, enquanto dados já comprimidos (JPEGs, MP3s) praticamente não mudam. Conhecer o tamanho comprimido é útil para barras de progresso, planejamento de armazenamento e para decidir se recompactar vale a pena.
Sintaxe
A sintaxe da função zip_entry_compressedsize() é a seguinte:
sintaxe da função zip_entry_compressedsize() no PHP
int zip_entry_compressedsize(resource $zip_entry)Onde $zip_entry é o handle da entrada zip retornado por zip_read() para o arquivo no arquivo zip. Ela retorna o tamanho comprimido como um número inteiro de bytes. Observe que esta função pertence à extensão zip legada e não está mais disponível no PHP 8.0+.
Exemplos de Uso
Vejamos um exemplo prático do uso de zip_entry_compressedsize() no PHP.
Exemplo: Obtendo o Tamanho Comprimido de um Arquivo em um Arquivo Zip
Suponha que você abriu um arquivo zip usando as funções legadas do PHP e deseja obter o tamanho comprimido de um arquivo no arquivo. Você pode usar a função zip_entry_compressedsize() para isso, da seguinte forma:
Obtendo o Tamanho Comprimido de um Arquivo em um Arquivo Zip no PHP
$zip = zip_open("example.zip");
if ($zip === false) {
die("Failed to open zip archive.");
}
$zip_entry = zip_read($zip);
if ($zip_entry === false) {
die("Failed to read zip entry.");
}
// get the compressed size of the file
$compressed_size = zip_entry_compressedsize($zip_entry);
echo "The compressed size of the file is: " . $compressed_size . " bytes.";Este código abre um arquivo zip example.zip usando zip_open(). Em seguida, lemos um arquivo no arquivo zip usando zip_read() e obtemos seu tamanho comprimido usando zip_entry_compressedsize(). Por fim, o tamanho comprimido é exibido ao usuário. Em um script real, você iteraria sobre zip_read() para percorrer todas as entradas e chamaria zip_close() ao terminar.
Alternativa Moderna: Usando ZipArchive
Como as funções legadas zip_* foram removidas no PHP 8.0, recomenda-se usar a classe ZipArchive integrada. Veja como obter o tamanho comprimido de um arquivo usando ZipArchive:
$zip = new ZipArchive;
if ($zip->open('example.zip') === true) {
$index = $zip->locateName('example.txt');
if ($index !== false) {
$stat = $zip->statIndex($index);
$compressedSize = $stat['comp_size']; // equivalent of zip_entry_compressedsize()
$uncompressedSize = $stat['size']; // original size
echo "Compressed: {$compressedSize} bytes\n";
echo "Uncompressed: {$uncompressedSize} bytes\n";
if ($uncompressedSize > 0) {
$ratio = round(100 * (1 - $compressedSize / $uncompressedSize), 1);
echo "Space saved: {$ratio}%\n";
}
}
$zip->close();
}O método statIndex() retorna um array associativo descrevendo a entrada; sua chave comp_size contém o tamanho comprimido que a função legada costumava retornar, e size contém o tamanho não comprimido. Como ambos estão disponíveis, você pode calcular a taxa de compressão diretamente, conforme mostrado acima.
Conclusão
Neste artigo, discutimos a função legada zip_entry_compressedsize() e como ela era usada para obter o tamanho comprimido de um arquivo em um arquivo zip. Explicamos sua sintaxe, por que o tamanho comprimido é importante, fornecemos um exemplo legado com tratamento básico de erros e mostramos uma alternativa moderna usando a classe ZipArchive com cálculo da taxa de compressão. Para versões atuais do PHP (8.0+), sempre prefira ZipArchive para evitar erros fatais e garantir compatibilidade.
Veja também
zip_entry_filesize()— obtém o tamanho não comprimido de uma entrada.zip_entry_name()— obtém o nome de uma entrada.zip_entry_compressionmethod()— vê como a entrada foi comprimida.zip_read()ezip_open()— abre um arquivo e itera suas entradas.- Visão geral da extensão Zip do PHP — a classe moderna
ZipArchive.