Si el otro día comentaba como descomprimir un archivo zip en nuestro hosting mediante un script PHP, hoy comentaré la operación contraria: cómo crear un archivo comprimido (y descargarlo a nuestro ordenador) con el contenido de una carpeta determinada de nuestro hosting.
Lo primero de todo es crear un script PHP (yo lo llamaré zip.php) con el siguiente contenido:
<?php
// Config Vars
$sourcefolder = "./" ; // Default: "./"
$zipfilename = "myarchive.zip"; // Default: "myarchive.zip"
$timeout = 5000 ; // Default: 5000
// instantate an iterator (before creating the zip archive, just
// in case the zip file is created inside the source folder)
// and traverse the directory to get the file list.
$dirlist = new RecursiveDirectoryIterator($sourcefolder);
$filelist = new RecursiveIteratorIterator($dirlist);
// set script timeout value
ini_set('max_execution_time', $timeout);
// instantate object
$zip = new ZipArchive();
// create and open the archive
if ($zip->open("$zipfilename", ZipArchive::CREATE) !== TRUE) {
die ("Could not open archive");
}
// add each file in the file list to the archive
foreach ($filelist as $key=>$value) {
$zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key");
}
// close the archive
$zip->close();
echo "Archive ". $zipfilename . " created successfully.";
// And provide download link ?>
<a href="http:<?php echo $zipfilename;?>" target="_blank">
Download <?php echo $zipfilename?></a>
Me daba un poco de pereza traducirlo a español, pero bueno, creo que el poco texto que tiene se entiende, ¿no? :-)
Una vez creado el archivo, lo subimos a la carpeta que deseamos comprimir via FTP (o usando el gestor de archivos que nos ofrezca nuestro servicio de hosting), y desde un navegador lo ejectuamos:http://dominio/ruta_del_script/zip.php
Esto creará un archivo ZIP conteniendo todo el conteniendo el directorio (y los posibles subdirectorios que cuelguen de él). Cuando el script termina de ejecutarse, nos ofrece un enlace desde donde poder descargar el archivo ZIP con el navegador. Obviamente, también es posible hacerlo via FTP.
Por último, MUY IMPORTANTE, que no se os olvide borrar tanto el script, como el archivo ZIP generado.
Visto en: http://stackoverflow.com/questions/3828385/compress-archive-folder-using-php-script