mercoledì 8 agosto 2007

Creare file zip con Php

  Primo post riguardante Php finalmente! Bene, oggi scrivo un metodo per creare file compressi (in formato zip) con il linguaggio Php. Niente di trascendentale: andate all'indirizzo http://www.phpconcept.net/pclzip/index.en.php e scaricate la libreria PclZip. Ora vi mostro un semplice file php che ho usato per testarne il funzionamento.
$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:

Andrea Urbini ha detto...

Bene Bene! Se fai delle guide sul php mi costringi a leggere il tuo blog. Continua così.

Anonimo ha detto...

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?

Unknown ha detto...

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 :-)

Anonimo ha detto...

e quindi invece che:
$listOfFilesToCompress="backup.php,prova.php";
metterò $listOfFilesToCompress=$contents;
????

Unknown ha detto...

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.

Anonimo ha detto...

$listOfFilesToCompress="NOMECARTELLA";

Provando cosi a me funziona e mi fa lo zip dell'intera cartella

Anonimo ha detto...

non basterebbe un semplice
$listOfFilesToCompress = implode(",",$contents);
?

Unknown ha detto...

Direi proprio che
$listOfFilesToCompress = implode(",",$contents);

dovrebbe funzionare :-)

Anonimo ha detto...

grande!
funzione semplice ma utilissima

l'ho subito riciclata