$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