zip_entry_compressedsize()
La funzione zip_entry_compressedsize() di PHP restituisce la dimensione compressa di un file in un archivio zip. Deprecata in PHP 7.4, rimossa in PHP 8.0.
La funzione zip_entry_compressedsize() è una funzione legacy dell'estensione zip di PHP. Restituisce la dimensione compressa di una singola voce all'interno di un archivio zip aperto — ovvero il numero di byte che il file occupa effettivamente su disco dopo la compressione, che di solito è inferiore alla dimensione originale.
Questa pagina spiega cosa restituiva la funzione, come veniva utilizzata e — soprattutto — cosa usare al suo posto, perché la funzione è stata deprecata in PHP 7.4 e rimossa in PHP 8.0. Su qualsiasi installazione moderna di PHP (8.0 o successiva), la sua chiamata genera un errore fatale Error, quindi è preferibile utilizzare la classe ZipArchive mostrata di seguito.
Perché la dimensione compressa è importante
Ogni file archiviato in un archivio zip ha due dimensioni:
- Dimensione non compressa — la lunghezza in byte originale del file. Vedi
zip_entry_filesize(). - Dimensione compressa — la lunghezza in byte dopo che l'algoritmo deflate l'ha ridotta. Questo è ciò che
zip_entry_compressedsize()restituiva.
Confrontando le due si ottiene il rapporto di compressione. Un testo altamente comprimibile potrebbe ridursi al 20% della sua dimensione originale, mentre i dati già compressi (JPEG, MP3) cambiano a malapena. Conoscere la dimensione compressa è utile per le barre di avanzamento, la pianificazione dello spazio di archiviazione e per decidere se vale la pena ri-comprimere.
Sintassi
La sintassi della funzione zip_entry_compressedsize() è la seguente:
sintassi della funzione zip_entry_compressedsize() in PHP
int zip_entry_compressedsize(resource $zip_entry)Dove $zip_entry è l'handle della voce zip restituito da zip_read() per il file nell'archivio zip. Restituisce la dimensione compressa come numero intero di byte. Si noti che questa funzione appartiene all'estensione zip legacy e non è più disponibile in PHP 8.0+.
Esempi d'uso
Vediamo un esempio pratico dell'utilizzo di zip_entry_compressedsize() in PHP.
Esempio: Ottenere la Dimensione Compressa di un File in un Archivio Zip
Supponiamo di aver aperto un archivio zip usando le funzioni zip legacy di PHP e di voler ottenere la dimensione compressa di un file nell'archivio. È possibile utilizzare la funzione zip_entry_compressedsize() come segue:
Ottenere la Dimensione Compressa di un File in un Archivio Zip in 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.";Questo codice apre un archivio zip example.zip utilizzando zip_open(). Viene quindi letto un file nell'archivio con zip_read() e si ottiene la sua dimensione compressa tramite zip_entry_compressedsize(). Infine, la dimensione compressa viene mostrata all'utente. In uno script reale si utilizzerebbe un ciclo con zip_read() per scorrere ogni voce, e si chiamerebbe zip_close() al termine.
Alternativa Moderna: Usare ZipArchive
Poiché le funzioni zip_* legacy sono state rimosse in PHP 8.0, si raccomanda di utilizzare la classe integrata ZipArchive. Ecco come ottenere la dimensione compressa di un file usando 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();
}Il metodo statIndex() restituisce un array associativo che descrive la voce; la chiave comp_size contiene la dimensione compressa che la funzione legacy restituiva, mentre size contiene la dimensione non compressa. Poiché entrambe sono disponibili, è possibile calcolare direttamente il rapporto di compressione, come mostrato sopra.
Conclusione
In questo articolo abbiamo discusso la funzione legacy zip_entry_compressedsize() e come veniva utilizzata per ottenere la dimensione compressa di un file in un archivio zip. Ne abbiamo spiegato la sintassi, perché la dimensione compressa è importante, fornito un esempio legacy con gestione degli errori di base e mostrato un'alternativa moderna usando la classe ZipArchive con il calcolo del rapporto di compressione. Per le versioni correnti di PHP (8.0+), preferire sempre ZipArchive per evitare errori fatali e garantire la compatibilità.
Vedi anche
zip_entry_filesize()— ottieni la dimensione non compressa di una voce.zip_entry_name()— ottieni il nome di una voce.zip_entry_compressionmethod()— scopri come è stata compressa la voce.zip_read()ezip_open()— apri un archivio e scorri le sue voci.- Panoramica dell'estensione PHP Zip — la classe moderna
ZipArchive.