W3docs

zip_entry_filesize()

La funzione zip_entry_filesize() restituiva la dimensione non compressa di un file in un archivio zip. Deprecata in PHP 8.0, rimossa in PHP 8.1.

La funzione zip_entry_filesize() era una funzione PHP integrata che restituiva la dimensione non compressa (originale), in byte, di un singolo file all'interno di un archivio zip. Funzionava insieme alla vecchia API zip procedurale (zip_open(), zip_read() e zip_entry_open()).

Attenzione

zip_entry_filesize() è stata deprecata in PHP 8.0 e rimossa in PHP 8.1. Non esiste nel PHP moderno. Il nuovo codice dovrebbe usare la classe ZipArchive — questa pagina mostra l'approccio equivalente e supportato.

Cosa significa "dimensione non compressa"

Un archivio zip memorizza due dimensioni per ogni voce:

  • Dimensione non compressa — quanto è grande il file una volta estratto (quello che zip_entry_filesize() riportava, e ciò che ZipArchive::statName() espone come size).
  • Dimensione compressa — quanti byte occupa effettivamente la voce all'interno dell'archivio dopo la compressione. Nell'API procedurale questo era zip_entry_compressedsize(); con ZipArchive è il campo comp_size.

Conoscere in anticipo la dimensione non compressa è utile per mostrare le dimensioni di download agli utenti, decidere se si dispone di spazio su disco sufficiente per l'estrazione, o validare un upload prima di decomprimerlo.

Sintassi precedente

A titolo di riferimento, la firma originale era:

int zip_entry_filesize(resource $zip_entry)

Dove $zip_entry è un handle di voce zip restituito da zip_read(). Restituiva la dimensione non compressa della voce in byte. Poiché la funzione non esiste più, non utilizzarla nel nuovo codice.

Il sostituto moderno: ZipArchive::statName()

Il modo supportato per leggere la dimensione non compressa di una voce è ZipArchive::statName(), che restituisce un array associativo di metadati (o false se la voce è mancante). La chiave size contiene la dimensione non compressa.

$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() cerca una voce tramite il suo percorso all'interno dell'archivio. Se si dispone solo di un indice (ad esempio durante il ciclo con numFiles), utilizzare invece statIndex() — restituisce la stessa struttura array.

Confronto tra dimensione compressa e non compressa

Poiché l'array stat contiene entrambi i numeri, è possibile riportare il rapporto di compressione in un unico passaggio — senza chiamate separate come la vecchia coppia 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.";
}

Errori comuni

  • Verificare il valore restituito. open() restituisce true in caso di successo o un codice di errore (un integer) in caso di fallimento, quindi confrontare con === true, non con un controllo truthy generico. statName() restituisce false per una voce mancante.
  • size è il valore non compresso. Un errore comune è presumere che sia la dimensione su disco all'interno del zip — quello è comp_size.
  • Anche le directory sono voci. Quando si esegue il ciclo con statIndex(), le voci directory appaiono con una / finale e un size pari a 0.

Conclusione

zip_entry_filesize() è stata rimossa in PHP 8.1, quindi non dovrebbe apparire nel nuovo codice. Il suo compito — leggere la dimensione non compressa di una voce — è ora gestito da ZipArchive::statName() (o statIndex()), il cui campo size fornisce lo stesso valore esponendo anche comp_size per la dimensione compressa. Vedere la panoramica di ZipArchive e filesize() per altri helper correlati alle dimensioni dei file.

Esercizio

Pratica
Qual è il ruolo della funzione zip_entry_filesize() in PHP?
Qual è il ruolo della funzione zip_entry_filesize() in PHP?
Was this page helpful?