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()).
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ò cheZipArchive::statName()espone comesize). - Dimensione compressa — quanti byte occupa effettivamente la voce all'interno dell'archivio dopo la compressione. Nell'API procedurale questo era
zip_entry_compressedsize(); conZipArchiveè il campocomp_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()restituiscetruein 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()restituiscefalseper 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 unsizepari a0.
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.