W3docs

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

Prática

Prática
Qual é a funcionalidade da função zip_entry_compressedsize() no PHP?
Qual é a funcionalidade da função zip_entry_compressedsize() no PHP?
Was this page helpful?