Zippare una directory con PHP
Avrei voluto utilizzare le zip file functions (di cui trovate un ottimo tutorial su Zend Developer Zone) ma guardando il phpinfo di Aruba si nota che non hanno compilato PHP usando l'ozione di configurazione --with-zip[=DIR].
Ad ogni modo leggebndo fra i commenti presenti in corredo alle zip file funcions,incappo in questo commento di Lennart Poot: l'idea è usare la librearia di "zippaggio" di phpMyAdmin,un semplice file denominato zip.lib.php nella directory "libraries".
A questo punto ecco il codice che crea un archivio al volo specificando la cartella contenente i files e settando gli header per spedirlo direttamente al browser. Il seguente codice NON archivia le directory (if (!is_dir($file) && $file != "." && $file != ".." ) {) e non crea una cartella nell'archivio contenente i files ma semplicemente archivia tutti i files che trova.
Ecco il codice,con qualche modifica rispetto al commento e con l'aggiunta di ciò che altri lettori di php.net han fatto notare:
require_once('zip.lib.php');
$zipfilename = 'chris_sorgentic++.zip'; // nome del file da creare
$ad_dir = 'sorgenti'; // path alla directory contenete i files
$zipfile = new zipfile();
if ($handle = opendir($ad_dir)) { // apre la direcotry
while (false !== ($file = readdir($handle))) {
if (!is_dir($file) && $file != "." && $file != ".." ) {
$f_tmp = @fopen( $ad_dir . '/' . $file, 'r'); // apre in lettura il file
if($f_tmp){
$dump_buffer=fread( $f_tmp, filesize($ad_dir . '/' . $file)); // prende il contenuto
$zipfile -> addFile($dump_buffer,$file); // aggiunge il file allo zip
fclose( $f_tmp );
}
}
}
} else {
echo "Non riesco ad aprire la directory $ad_dir.";
exit;
}
$dump_buffer = $zipfile -> file(); // dump del file
// write the file to disk:
/*
$file_pointer = fopen('newzip.zip', 'w');
if($file_pointer){
fwrite( $file_pointer, $dump_buffer, strlen($dump_buffer) );
fclose( $file_pointer );
}
*/
// response zip archive to browser:
header('Pragma: public');
header('Content-type: application/zip');
header('Content-length: ' . strlen($dump_buffer));
header('Content-Disposition: attachment; filename="'.$zipfilename.'"');
echo $dump_buffer; // stampo il contenuto del file
09:41
|
Categorie:
PHP
|
This entry was posted on 09:41
and is filed under
PHP
.
You can follow any responses to this entry through
the RSS 2.0 feed.
You can leave a response,
or trackback from your own site.
2 comments:
Eccellente, ha funzionato subito! Mi sarebbe utile sapere come fare a zippare anche le sottodirectory con il contenuto (non sono molto pratico di PHP).
Grazie
Alberto
@Alberto: ciao Alberto,al momento non ti so dire di preciso come fare,ma non appena ho tempo pubblicherò la cosa. Arrivederci :)
Posta un commento