$backupFile="archive".date("dmY").".zip"; //Se esiste già, lo cancello if (file_exists($backupFile)) @unlink($backupFile); //Includo la libreria e genero l'oggetto zip require_once('pclzip-2-6/pclzip.lib.php'); $archive = new PclZip($backupFile); //Una lista di nomi di files da comprimere $listOfFilesToCompress="backup.php,prova.php"; //Aggiungo i files all'archivio $v_list = $archive->add($listOfFilesToCompress); if ($v_list == 0) { die("Error : ".$archive->errorInfo(true)); } //Opzionale: faccio scaricare il file zip header("Content-type: application/zip"); header("Content-Disposition: attachment; filename=$backupFile"); header("Content-Description: Backup"); header("Content-Length: ".filesize($backupFile)); readfile($backupFile);Io ho utilizzato una stringa che contiene i nomi dei files da aggiungere all'archivio compresso, e devono essere tutti separati da una virgola. Risoluzione ad un problema comune: tra un file e l'altro mettete solo la virgola e NON gli spazi (ad esempio: "backup.php,prova.php" e NON "backup.php, prova.php") altrimenti la libreria darà errore.
Che altro...se dovete comprimere una cartella, dovrete fare un ciclo su tutti i files contenuti nella cartella (usate opendir eccetera).
Se notate ho anche scritto alcune righe per lo scaricamento automatico del file zip risultante:
Per altre informazioni (ad esempio sull'estrazione automatica) riguardanti le caratteristiche di PclZip vi rimando al manuale del sito ufficiale:
http://www.phpconcept.net/pclzip/man/en/index.php?understand
Buon Php a tutti!!
9 commenti:
Bene Bene! Se fai delle guide sul php mi costringi a leggere il tuo blog. Continua così.
e se invece volessi fare un backup di tutta il mio ftp..mica posso mettermi a scrivere la lista di tutti i file..come mi comporto?
Scusa il ritardo ma questo post l'avevo perso di vista. Puoi usare ftp-nlist
http://it2.php.net/manual/it/function.ftp-nlist.php
per ottenere la lista dei file da comprimere :-)
e quindi invece che:
$listOfFilesToCompress="backup.php,prova.php";
metterò $listOfFilesToCompress=$contents;
????
Non basta perchè $listOfFilesToCompress deve essere una stringa separata da una virgola, non un array (ftp_nlist ti ritorna invece un array).
Devi utilizzare prima un foreach per unire gli elementi dell'array in un'unica stringa separata da virgola.
$listOfFilesToCompress="NOMECARTELLA";
Provando cosi a me funziona e mi fa lo zip dell'intera cartella
non basterebbe un semplice
$listOfFilesToCompress = implode(",",$contents);
?
Direi proprio che
$listOfFilesToCompress = implode(",",$contents);
dovrebbe funzionare :-)
grande!
funzione semplice ma utilissima
l'ho subito riciclata
Posta un commento