Come decomprimere un archivio ZIP con PHP

A volte potrebbe capitarti di dover spostare una grossa mole di dati da un server all’altro, o da computer locale a FTP remoto. La maggior parte di queste operazioni viene eseguita effettuando l’upload della cartella principale, cosa che comporta il trasferimento file per file.
Ma sapevi che il tempo impiegato per spostare un singolo file rispetto a file multipli, a parità di dimensione totale, richiede meno tempo?
È sicuramente più conveniente effettuare l’upload di un unico archivio .zip sul server remoto e poi procedere con la decompressione del file sul server stesso, se non sai come fare, questa guida è stata scritta apposta per te!
- Leggi l'articolo, ti bastano solo 1 minuto, 28 secondi
Sei di fretta? Scarica il PDF e consultalo quando vuoi!
Sommario
1 La classe ZipArchive |
2 Verificare se la classe ZipArchive è abilitata |
3 Decomprimere un file zip con la classe ZipArchive |
4 Un esempio pratico |
5 Commenti |
La classe ZipArchive
Il linguaggio PHP supporta nativamente la possibilità di comprimere/decomprimere file di archivio in formato zip già dalla versione 5.2.0 grazie alla classe ZipArchive.
Verificare se la classe ZipArchive è abilitata
Ma purtroppo, a seconda delle configurazioni e delle politiche di sicurezza, non tutti i provider abilitano di default l’utilizzo di ZipArchive. Come verificare se il tuo server è configurato in maniera tale da permetterne l’utilizzo? È molto semplice! Crea nella root del tuo server un nuovo file, ad esempio info.php, inserendo al suo interno la sola riga di codice:
<?php phpinfo(); ?>
dopodiché, accedi a questa pagina tramite un qualsiasi browser. Ad esempio, se il tuo server è raggiungibile all’indirizzo https://www.example.com/, non dovrai fare altro che aprire il tuo browser e visitare l’indirizzo:
https://www.example.com/info.php
Scorrendo la pagina che elenca tutte le configurazioni del server che ospita la pagina stessa, troverai le righe riguardanti l’utilizzo della classe ZipArchive, come in figura:
Se in corrispondenza della voce “Zip” trovi la dicitura “enabled” (esattamente come in figura), vuol dire che la classe è attiva ed utilizzabile, in caso contrario, contatta il tuo provider e richiedine l’abilitazione.
Decomprimere un file zip con la classe ZipArchive
Ora che hai verificato il corretto funzionamento della class ZipArchive sul tuo server, possiamo procedere con la funzione che si occuperà di decomprimere il file archivio in formato .zip.
Crea un nuovo file nella cartella root del server, ad esempio unzip.php, inserendo al suo interno le righe di codice:
// Funzione per decomprimere un archivio zip function unzip_file( $filename, $destination ) { // Creo un nuovo oggetto della classe ZipArchive $archive = new ZipArchive(); // Apro il file archivio da decomprimere if ( $archive->open( $filename ) !== true ) { die( 'Si è verificato un errore nella decompressione del file' . $filename ); } // Effettuo l'estrazione dei files $archive->extractTo( $destination ); // Chiudo l'archivio $archive->close(); echo 'Estrazione archivio completata'; }
Adesso, non ti resta che chiamare la funzione con i giusti parametri ed il gioco è fatto!
Un esempio pratico
Cosa c’è di meglio di un buon esempio per comprendere a pieno un argomento? Eccone uno adatto!
Ipotizza di avere sul tuo server un file chiamato wordpress-4.9.8-it_IT.zip e di volerlo decomprimere direttamente sul server, nella cartella stessa in cui il file zip è presente.
Ti basterà modificare il file unzip.php contenente la funzione discussa in precedenza ed aggiungere la chiamata alla stessa in questo modo:
// Indica il percorso assoluto del file zip da decomprimere $filename = 'wordpress-4.9.8-it_IT.zip'; // Determina il percorso assoluto in cui verrà decompresso il file (stesso nome del file nella cartella di default) $destination = 'wordpress'; unzip_file( $filename, $destination );
Se desideri approfondire l’argomento e saperne di più sulla classe ZipArchive, leggi la documentazione ufficiale: