zip_entry_compressionmethod()
A função zip_entry_compressionmethod() do PHP retorna o método de compressão de uma entrada em um arquivo zip. Descontinuada no PHP 5.3 e removida no 8.0.
Aviso:
zip_entry_compressionmethod()foi descontinuada no PHP 5.3.0 e removida no PHP 8.0.0 (a antiga API proceduralzip_*de leitura foi eliminada). Ela não está mais disponível no PHP moderno. Esta página é mantida apenas como referência histórica. Em qualquer versão suportada do PHP, use a classeZipArchive, conforme mostrado abaixo.
A função zip_entry_compressionmethod() era uma função built-in do PHP usada para ler o método de compressão de uma entrada (arquivo) individual dentro de um arquivo zip. O método de compressão é o algoritmo utilizado para armazenar essa entrada — mais comumente deflate (o padrão) ou store (sem compressão).
Esta página explica o que a função legada fazia e, mais importante, como obter as mesmas informações no PHP moderno com ZipArchive.
Por que o método de compressão é importante
Cada arquivo em um arquivo zip registra como foi comprimido. Conhecer o método permite:
- Auditar um arquivo — confirmar se os arquivos estão realmente comprimidos ou apenas armazenados.
- Estimar o processamento — entradas com
storedescomprimem instantaneamente; entradas comdeflateconsomem CPU. - Depurar problemas de tamanho — dados já comprimidos (JPEG, PNG, MP4) costumam ser armazenados em vez de recomprimidos, pois recompactá-los não economiza nada.
Os dois métodos que você verá na prática são:
| Constante | Código | Significado |
|---|---|---|
ZipArchive::CM_STORE | 0 | A entrada é armazenada sem compressão. |
ZipArchive::CM_DEFLATE | 8 | A entrada é comprimida com o algoritmo deflate (o padrão). |
Sintaxe legada
A função original recebia um identificador de entrada zip retornado por zip_read():
int zip_entry_compressionmethod(resource $zip_entry)Onde $zip_entry é o recurso de entrada zip para um arquivo no arquivo zip. Isso exigia a API zip procedural legada, que não existe mais, portanto não a utilize em código novo.
Abordagem moderna com ZipArchive
A maneira portável e compatível com versões atuais para ler o método de compressão é ZipArchive::statIndex(). Ela retorna um array cuja chave comp_method contém o código numérico do método (0 para store, 8 para deflate). O exemplo a seguir é completamente autossuficiente — cria um pequeno arquivo zip e reporta o método de cada entrada:
<?php
$file = sys_get_temp_dir() . '/example.zip';
// 1. Build a zip with one compressed and one stored entry.
$zip = new ZipArchive();
if ($zip->open($file, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) {
$zip->addFromString('report.txt', str_repeat('compress me ', 100));
$zip->addFromString('raw.txt', 'left as-is');
$zip->setCompressionName('raw.txt', ZipArchive::CM_STORE); // force no compression
$zip->close();
}
// 2. Reopen and read each entry's compression method.
$labels = [
ZipArchive::CM_STORE => 'stored (no compression)',
ZipArchive::CM_DEFLATE => 'deflate',
];
$zip = new ZipArchive();
if ($zip->open($file) === true) {
for ($i = 0; $i < $zip->numFiles; $i++) {
$stat = $zip->statIndex($i);
$code = $stat['comp_method'];
$method = $labels[$code] ?? "unknown ($code)";
echo "{$stat['name']} => {$method}\n";
}
$zip->close();
}Saída:
report.txt => deflate
raw.txt => stored (no compression)statIndex() lê do diretório central, por isso é eficiente — nunca descomprime o arquivo.
Alternativa mais curta: getCompressionName()
Se o seu PHP for compilado contra libzip 1.0 ou mais recente, ZipArchive::getCompressionName() retorna o nome do método diretamente como string:
$zip = new ZipArchive();
if ($zip->open('example.zip') === true) {
// Name of the compression method used for the first entry.
echo $zip->getCompressionName(0); // e.g. "deflate"
$zip->close();
}Isso é mais legível, mas getCompressionName() não está presente em todas as compilações. Prefira a abordagem com statIndex() acima quando precisar de portabilidade entre servidores.
Conclusão
zip_entry_compressionmethod() pertencia à API zip procedural removida do PHP e não deve ser usada em código novo. Para ler o método de compressão de uma entrada zip no PHP moderno, use ZipArchive::statIndex() e inspecione o valor de comp_method (0 = store, 8 = deflate), ou getCompressionName() onde estiver disponível.
Para continuar trabalhando com arquivos zip, consulte Trabalhando com a extensão Zip, zip_entry_name() para o nome de uma entrada e zip_entry_compressedsize() para o seu tamanho comprimido.