W3docs

zip_entry_filesize()

La fonction zip_entry_filesize() permettait d'obtenir la taille non compressée d'un fichier dans une archive zip en PHP.

La fonction zip_entry_filesize() était une fonction PHP intégrée qui retournait la taille non compressée (originale), en octets, d'un fichier individuel dans une archive zip. Elle fonctionnait conjointement avec l'ancienne API zip procédurale (zip_open(), zip_read() et zip_entry_open()).

Avertissement

zip_entry_filesize() a été dépréciée en PHP 8.0 et supprimée en PHP 8.1. Elle n'existe plus dans les versions modernes de PHP. Le nouveau code doit utiliser la classe ZipArchive à la place — cette page présente l'approche équivalente et supportée.

Signification de la « taille non compressée »

Une archive zip stocke deux tailles pour chaque entrée :

  • Taille non compressée — la taille du fichier une fois extrait (ce que zip_entry_filesize() retournait, et ce que ZipArchive::statName() expose via le champ size).
  • Taille compressée — le nombre d'octets que l'entrée occupe réellement dans l'archive après compression. Dans l'API procédurale, il s'agissait de zip_entry_compressedsize() ; avec ZipArchive, c'est le champ comp_size.

Connaître la taille non compressée à l'avance est utile pour afficher la taille de téléchargement aux utilisateurs, vérifier si l'espace disque est suffisant pour l'extraction, ou valider un fichier téléchargé avant de le décompresser.

Syntaxe historique

Pour référence, la signature originale était :

int zip_entry_filesize(resource $zip_entry)

$zip_entry est un handle d'entrée zip retourné par zip_read(). Elle retournait la taille non compressée de l'entrée en octets. Comme cette fonction n'existe plus, ne l'utilisez pas dans du nouveau code.

Le remplacement moderne : ZipArchive::statName()

La méthode supportée pour lire la taille non compressée d'une entrée est ZipArchive::statName(), qui retourne un tableau associatif de métadonnées (ou false si l'entrée est absente). La clé size contient la taille non compressée.

$zip = new ZipArchive();
if ($zip->open('example.zip') === true) {
    $stat = $zip->statName('file.txt');
    if ($stat !== false) {
        echo "The uncompressed size of the file is: " . $stat['size'] . " bytes.";
    } else {
        echo "File not found in archive.";
    }
    $zip->close();
} else {
    echo "Failed to open archive.";
}

statName() recherche une entrée par son chemin dans l'archive. Si vous n'avez qu'un index (par exemple lors d'une itération avec numFiles), utilisez statIndex() à la place — il retourne le même format de tableau.

Comparaison des tailles compressée et non compressée

Puisque le tableau stat contient les deux valeurs, vous pouvez afficher le taux de compression en un seul passage — sans appels séparés comme l'ancienne paire zip_entry_filesize() / zip_entry_compressedsize() :

$zip = new ZipArchive();
if ($zip->open('example.zip') === true) {
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $stat = $zip->statIndex($i);
        $saved = $stat['size'] > 0
            ? round(100 * (1 - $stat['comp_size'] / $stat['size']))
            : 0;
        echo "{$stat['name']}: {$stat['size']} bytes -> {$stat['comp_size']} bytes ({$saved}% saved)\n";
    }
    $zip->close();
} else {
    echo "Failed to open archive.";
}

Pièges courants

  • Vérifiez la valeur de retour. open() retourne true en cas de succès ou un code d'erreur (un entier) en cas d'échec, donc comparez avec === true et non une vérification de véracité souple. statName() retourne false pour une entrée manquante.
  • size est la valeur non compressée. Une erreur courante est de supposer qu'il s'agit de la taille sur le disque dans le zip — c'est comp_size.
  • Les répertoires sont aussi des entrées. Lors d'une itération avec statIndex(), les entrées de répertoire apparaissent avec un / final et une size de 0.

Conclusion

zip_entry_filesize() a été supprimée en PHP 8.1 et ne doit donc pas apparaître dans du nouveau code. Sa fonction — lire la taille non compressée d'une entrée — est désormais assurée par ZipArchive::statName() (ou statIndex()), dont le champ size donne la même valeur tout en exposant aussi comp_size pour la taille compressée. Consultez la vue d'ensemble de ZipArchive et filesize() pour les fonctions auxiliaires liées à la taille des fichiers.

Pratique

Pratique
Quel est le rôle de la fonction zip_entry_filesize() en PHP ?
Quel est le rôle de la fonction zip_entry_filesize() en PHP ?
Was this page helpful?