subir - Comprimiendo un directorio de archivos con PHP
subir archivos php ejemplo (6)
Estoy creando un script de copia de seguridad de PHP que descargará todo de una base de datos y lo guardará en un archivo. He tenido éxito al hacer eso, pero ahora necesito tomar cientos de imágenes en un directorio y comprimirlas en un simple archivo .tar.gz.
¿Cuál es la mejor manera de hacer esto y cómo se hace? No tengo idea de por dónde empezar.
Gracias por adelantado
La respuesta elegida no admite la recursión (subdirectorios), así que aquí tienes:
<?
ignore_user_abort(true);
set_time_limit(3600);
$main_path = ''folder2zip'';
$zip_file = ''zipped.zip'';
if (file_exists($main_path) && is_dir($main_path))
{
$zip = new ZipArchive();
if (file_exists($zip_file)) {
unlink($zip_file); // truncate ZIP
}
if ($zip->open($zip_file, ZIPARCHIVE::CREATE)!==TRUE) {
die("cannot open <$zip_file>/n");
}
$files = 0;
$paths = array($main_path);
while (list(, $path) = each($paths))
{
foreach (glob($path.''/*'') as $p)
{
if (is_dir($p)) {
$paths[] = $p;
} else {
$zip->addFile($p);
$files++;
echo $p."<br>/n";
}
}
}
echo ''Total files: ''.$files;
$zip->close();
}
Mi simple archivo PHP de 2 líneas mediante el cual puedo crear un archivo ZIP de respaldo en unos pocos segundos:
Simplemente navegue: http://mysiteurl.com/create-my-zip.php
<?php
/* PHP FILE NAME: create-my-zip.php */
echo exec(''tar zcf my-backup.tar.gz mydirectory/*'');
echo ''...Done...'';
?>
Simplemente cargue este archivo en el servidor y navegue directamente.
Notas:
- ''mydirectory'' ==> directorio de destino relacionado con este script PHP;
- ''my-backup.tar.gz'' ==> se creará en el mismo directorio donde se carga este archivo PHP;
Puede fácilmente gzip una carpeta usando este comando:
tar -cvzpf backup.tar.gz /path/to/folder
Este comando se puede ejecutar a través de phps system () - function.
No te olvides de escapeshellarg () todos los comandos.
Si está utilizando PHP 5.2 o posterior, puede usar la biblioteca Zip
y luego hacer algo en la línea de:
$images_dir = ''/path/to/images'';
//this folder must be writeable by the server
$backup = ''/path/to/backup'';
$zip_file = $backup.''/backup.zip'';
if ($handle = opendir($images_dir))
{
$zip = new ZipArchive();
if ($zip->open($zip_file, ZipArchive::CREATE)!==TRUE)
{
exit("cannot open <$zip_file>/n");
}
while (false !== ($file = readdir($handle)))
{
$zip->addFile($images_dir.''/''.$file);
echo "$file/n";
}
closedir($handle);
echo "numfiles: " . $zip->numFiles . "/n";
echo "status:" . $zip->status . "/n";
$zip->close();
echo ''Zip File:''.$zip_file . "/n";
}
También puedes usar algo como esto:
exec(''tar -czf backup.tar.gz /path/to/dir-to-be-backed-up/'');
Asegúrese de prestar atención a las advertencias sobre el uso de la función exec()
PHP.
$archive_name = ''path/to/archive/arch1.tar'';
$dir_path = ''path/to/dir'';
$archive = new PharData($archive_name);
$archive->buildFromDirectory($dir_path); // make path/to/archive/arch1.tar
$archive->compress(Phar::GZ); // make path/to/archive/arch1.tar.gz
unlink($archive_name); // deleting path/to/archive/arch1.tar