Come si comprime un file zip con php

Vorrei comprimere o zippare un file di una directory del mio server, ad esempio un file grafico.

Come Fare?

-

La classe php ZipArchive

Per zippare un file ci viene in aiuto la classe di php ZipArchive() , attraverso la quale possiamo creare un file zip dentro la nostra cartella della root del sito, in maniera da inserisci dentro tutti i file che desideriamo archiviare come ad esempio un file grafico inviato al server mediante upload da un form.

Il codice base per creare una cartella zip e inserire dentro un file è:

$time = time();
	
$archivia = new ZipArchive();
	
$nome_file = $time."_archivio.zip";

if ($archivia->open($nome_file, ZIPARCHIVE::CREATE)!==TRUE) 
{
  @exit("Impossibile aprire <$nome_file>\n");
}

$archivia->addFile("Mio_File.png");

echo "Sono stati zippati: " . $archivia->numFiles . " file.\n";

$archivia->close();

 

Creare un archivio zip

Come funziona lo script?

Innanzitutto diamo un nome univoco al nostro archivio zip in maniera tale che in caso di file grafici, testuali o altri, con stesso nome non possano essere sovrascritti all'interno del file zip, quindi impostiamo una variabile con il valore di time() (ora corrente in secondi dal 1970) 

  • Memorizziamo il tempo in secondi in una variabile $time = time();  es:  1622027263
  • Con new ZipArchive(); istanziamo la classe ZipArchive
  • Diamo un nome al nostro archivo zip:  $nome_file = $time."_archivio.zip";  preceduto dalla variabile time come detto per assegnare un valore univoco al file zip, es: 1622027263_archivio.zip,  
  • Con la funzione addFile  assegniamo il file grafico o altro file da comprimere dentro il file zip.

Dentro addFile è possibile far passare delle variabili contenenti i nomi dei file da zippare ad esempio ogni qualvolta si esegue un upload per memorizzare i dati dentro un database e quindi creare a sua volta un archivio 

Upload e comprimi il file zippandolo

Vediamo un esempio pratico su un possibile utilizzo della classe ZipArchive() abbinata ad un semplice sistema di upload di file, partiamo dal semplice form:

<form action="#" method="post" enctype="multipart/form-data">
  Select image to upload:
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="Upload Image" name="submit">
</form>

Ora creiamo una funzione zippaFile() includendo il nostro codice ZipArchive:

function zippaFile($file)
{
$time = time();	
$archivia = new ZipArchive();	
$nome_file = $time."_archivio.zip";
if ($archivia->open($nome_file, ZIPARCHIVE::CREATE)!==TRUE) {
  @exit("Impossibile aprire <$nome_file>\n");
}
$archivia->addFile("tuaCartellaUploads/".$file);
echo "Sono stati zippati: " . $archivia->numFiles . " file.\n";
$archivia->close();
}

Nella funzione zippaFile() faremo passare le variabili realtive ai nomi dei file $file che verranno caricati sul server tramite la funzion $archivia->addFile("tuaCartellaUploads/".$file);

Per semplicità utilizziamo un piccolo script upload che ci aiuterà a caricare i file dentro la nostra cartella tuaCartellaUploads,  ovviamente si possono utilizzare qualsiasi sistema anche gestito da ajax.

 

$target_dir = "tuaCartellaUploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
if(isset($_POST["submit"])) {
  $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
  if($check !== false) {
    $uploadOk = 1;
  } else {
    $uploadOk = 0;
  }
}
if (file_exists($target_file)) {

  $uploadOk = 0;
}
if ($_FILES["fileToUpload"]["size"] > 500000) {

  $uploadOk = 0;
}

if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  $uploadOk = 0;
}
if ($uploadOk == 0) {
} else {
  if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
	echo  $file = htmlspecialchars( basename( $_FILES["fileToUpload"]["name"]));
	  
	  ////////////////////////////////////////////////
        zippaFile($file); /// funzione ZipArchive
      //////////////////////////////////////////////////
	  
	  
  } else {
  echo('notifica ecc...');
	  
  }
}


Come funziona lo script?

E' molto semplice, nel momento in cui selezioniamo il nostro file da inviare al server, lo script upload elaborerà i parametri del file e lo invierà nella directory memorizzata nella variabile $target_dir, il nome del file verrà memorizzato nella variabile $file  che a sua volta verrà fatta passare dentro la funzione  zippaFile($file),  e il risultato sarà visibile nella root del vostro sito con i file zippati con all'interno.

 

 


Php
 
Zip
   


Lascia un commento