W3docs

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

Pratica

Pratica
Qual è la funzionalità della funzione zip_entry_compressedsize() in PHP?
Qual è la funzionalità della funzione zip_entry_compressedsize() in PHP?
Was this page helpful?