zip_entry_compressionmethod()
La fonction zip_entry_compressionmethod() est une fonction PHP intégrée permettant d'obtenir la méthode de compression d'un fichier dans une archive zip.
Avertissement :
zip_entry_compressionmethod()a été dépréciée en PHP 5.3.0 et supprimée en PHP 8.0.0 (l'ancienne API procéduralezip_*de lecture a été supprimée). Elle n'est plus disponible dans les versions modernes de PHP. Cette page est conservée à titre de référence historique. Sur toute version PHP supportée, utilisez la classeZipArchiveà la place, comme indiqué ci-dessous.
La fonction zip_entry_compressionmethod() était une fonction PHP intégrée utilisée pour lire la méthode de compression d'une entrée (fichier) dans une archive zip. La méthode de compression est l'algorithme utilisé pour stocker cette entrée — le plus souvent deflate (par défaut) ou store (sans compression).
Cette page explique ce que faisait la fonction héritée et, surtout, comment obtenir la même information dans PHP moderne avec ZipArchive.
Pourquoi la méthode de compression est importante
Chaque fichier dans une archive zip enregistre comment il a été compressé. Connaître la méthode vous permet de :
- Auditer une archive — vérifier si les fichiers sont réellement compressés ou simplement stockés.
- Estimer la charge — les entrées
storese décompressent instantanément ; les entréesdeflatesollicitent le CPU. - Déboguer les problèmes de taille — les données déjà compressées (JPEG, PNG, MP4) sont souvent stockées plutôt que recompressées, car la redéflation ne fait rien gagner.
Les deux méthodes que vous rencontrerez en pratique sont :
| Constante | Code | Signification |
|---|---|---|
ZipArchive::CM_STORE | 0 | L'entrée est stockée sans compression. |
ZipArchive::CM_DEFLATE | 8 | L'entrée est compressée avec l'algorithme deflate (par défaut). |
Syntaxe héritée
La fonction d'origine prenait un descripteur d'entrée zip renvoyé par zip_read() :
int zip_entry_compressionmethod(resource $zip_entry)Où $zip_entry est la ressource d'entrée zip d'un fichier dans l'archive. Cela nécessitait l'ancienne API zip procédurale qui n'existe plus — ne l'utilisez donc pas dans du nouveau code.
Approche moderne avec ZipArchive
La façon portable et compatible avec les versions actuelles de lire la méthode de compression est ZipArchive::statIndex(). Elle renvoie un tableau dont la clé comp_method contient le code numérique de la méthode (0 pour store, 8 pour deflate). L'exemple suivant est entièrement autonome — il crée une petite archive, puis affiche la méthode de chaque entrée :
<?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();
}Résultat :
report.txt => deflate
raw.txt => stored (no compression)statIndex() lit depuis le répertoire central, donc c'est une opération peu coûteuse — elle ne décompresse jamais le fichier.
Alternative plus courte : getCompressionName()
Si votre PHP est compilé contre libzip 1.0 ou une version plus récente, ZipArchive::getCompressionName() retourne directement le nom de la méthode sous forme de chaîne :
$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();
}C'est plus lisible, mais getCompressionName() n'est pas présente dans toutes les compilations. Préférez l'approche statIndex() ci-dessus lorsque vous avez besoin de portabilité entre les serveurs.
Conclusion
zip_entry_compressionmethod() appartenait à l'API zip procédurale supprimée de PHP et ne doit jamais être utilisée dans du nouveau code. Pour lire la méthode de compression d'une entrée zip dans PHP moderne, utilisez ZipArchive::statIndex() et inspectez sa valeur comp_method (0 = store, 8 = deflate), ou getCompressionName() lorsqu'elle est disponible.
Pour continuer à travailler avec les archives zip, consultez Travailler avec l'extension Zip, zip_entry_name() pour le nom d'une entrée, et zip_entry_compressedsize() pour sa taille compressée.