zip_entry_compressedsize()
Découvrez la fonction zip_entry_compressedsize() en PHP, son fonctionnement, sa syntaxe et l'alternative moderne avec ZipArchive.
La fonction zip_entry_compressedsize() est une fonction historique de l'extension PHP zip. Elle retourne la taille compressée d'une entrée individuelle dans une archive zip ouverte — c'est-à-dire le nombre d'octets que le fichier occupe réellement sur le disque après compression, généralement inférieur à sa taille d'origine.
Cette page explique ce que la fonction retournait, comment elle était utilisée, et — surtout — ce qu'il convient d'utiliser à la place, car la fonction a été dépréciée en PHP 7.4 et supprimée en PHP 8.0. Sur toute installation PHP moderne (8.0 ou ultérieure), l'appeler provoque une Error fatale ; utilisez donc la classe ZipArchive présentée ci-dessous.
Pourquoi la taille compressée est importante
Chaque fichier stocké dans une archive zip possède deux tailles :
- Taille non compressée — la longueur en octets du fichier d'origine. Voir
zip_entry_filesize(). - Taille compressée — la longueur en octets après que l'algorithme deflate l'a réduit. C'est ce que retournait
zip_entry_compressedsize().
Comparer les deux vous donne le taux de compression. Un texte très compressible peut être réduit à 20 % de sa taille d'origine, tandis que des données déjà compressées (JPEG, MP3) changent à peine. Connaître la taille compressée est utile pour les barres de progression, la planification du stockage et pour décider si une nouvelle compression est intéressante.
Syntaxe
La syntaxe de la fonction zip_entry_compressedsize() est la suivante :
syntaxe de la fonction zip_entry_compressedsize() en PHP
int zip_entry_compressedsize(resource $zip_entry)Où $zip_entry est le handle d'entrée zip retourné par zip_read() pour le fichier dans l'archive zip. Elle retourne la taille compressée sous forme d'un entier en octets. Notez que cette fonction appartient à l'extension zip historique et n'est plus disponible en PHP 8.0+.
Exemples d'utilisation
Examinons un exemple pratique d'utilisation de zip_entry_compressedsize() en PHP.
Exemple : Obtenir la taille compressée d'un fichier dans une archive Zip
Supposons que vous ayez ouvert une archive zip à l'aide des fonctions PHP zip historiques et que vous souhaitiez obtenir la taille compressée d'un fichier dans l'archive. Vous pouvez utiliser la fonction zip_entry_compressedsize() pour ce faire, comme suit :
Obtenir la taille compressée d'un fichier dans une archive Zip en 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.";Ce code ouvre un fichier d'archive zip example.zip à l'aide de zip_open(). Nous lisons ensuite un fichier dans l'archive avec zip_read() et obtenons sa taille compressée avec zip_entry_compressedsize(). Enfin, la taille compressée est affichée à l'utilisateur. Dans un script réel, vous utiliseriez une boucle sur zip_read() pour parcourir chaque entrée, et appelleriez zip_close() une fois terminé.
Alternative moderne : Utiliser ZipArchive
Puisque les fonctions historiques zip_* ont été supprimées en PHP 8.0, il est recommandé d'utiliser la classe intégrée ZipArchive à la place. Voici comment obtenir la taille compressée d'un fichier avec 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();
}La méthode statIndex() retourne un tableau associatif décrivant l'entrée ; sa clé comp_size contient la taille compressée que la fonction historique retournait, et size contient la taille non compressée. Ces deux valeurs étant disponibles, vous pouvez calculer le taux de compression directement, comme illustré ci-dessus.
Conclusion
Dans cet article, nous avons examiné la fonction historique zip_entry_compressedsize() et comment elle était utilisée pour obtenir la taille compressée d'un fichier dans une archive zip. Nous avons expliqué sa syntaxe, pourquoi la taille compressée est importante, fourni un exemple historique avec une gestion basique des erreurs, et présenté une alternative moderne utilisant la classe ZipArchive avec un calcul du taux de compression. Pour les versions PHP actuelles (8.0+), préférez toujours ZipArchive afin d'éviter les erreurs fatales et d'assurer la compatibilité.
Voir aussi
zip_entry_filesize()— obtenir la taille non compressée d'une entrée.zip_entry_name()— obtenir le nom d'une entrée.zip_entry_compressionmethod()— voir comment l'entrée a été compressée.zip_read()etzip_open()— ouvrir une archive et parcourir ses entrées.- Présentation de l'extension PHP Zip — la classe moderne
ZipArchive.