backup.php

Hey, pues nada que he querido descargar “chorrocientos” de archivos vía el buen FileZilla, ya que aparentemente no tengo acceso vía ssh no he podido crear un tar, por lo que me dí a la tarea de hacerlo vía php pues el servidor entiende ese lenguaje, a dicho scriptcillo lo he denominado backup.php y aquí tienen.

Esencialmente el asunto va así:

  1. Usamos PharData para decir que queremos crear un archivillo, puede ser un .zip o un .tar.
  2. Especificamos en $dir el directorio en el que queremos realizar dicha tarea (./ en mi caso).
  3. scandir nos regresa a $archivos un arreglo de los archivos que se encuentran en el directorio antes especificado en $dir, y el cual recorreremos con un foreach.
  4. Posteriorment le agregamos un if con 4 condiciones para omitir, el directorio actual, el directorio superior (pues salen listados como archivos que es lo que son), omitimos extensiones .php y el mismo archive.zip que se está creando.
  5. Agregamos cada uno de los archivos con $a->addFile, y voilá!.
<?php
try 
{
    $a = new PharData('archive.zip');
    
    $dir    = './';
    $archivos = scandir($dir);
    foreach ($archivos as $archivo){
        if($archivo!=".." && 
        $archivo!="." && 
        $archivo!="archive.zip" && 
        substr(strrchr($archivo,'.'),1)!="php" && 
        substr(strrchr($archivo,'.'),1)!="tar"){
            $a->addFile($archivo);
        }
    }
    echo "Files added to archive.zip";
} 
catch (Exception $e) 
{
    echo "Exception : " . $e;
}
?>

Y si todo sale bien, veremos el bonito “Files added to archive.zip”

Salu2!

Colofón: ¿Por qué carambas habría de hacer un script para bajar un sólo archivo si Filezilla puede hacerlo ? ash!…. fácil!, al sistema operativo le cuesta (ya sea que copies archivos de manera local o de manera remota) mas trabajo copiar 1000 archivos que midan 1MB cada uno que 1 archivo que mida 1000 MB =), el proceso de apertura de archivo implica mayor procesamiento, por lo que será mas rápido copiar un sólo archivo con las características arriba descritas, que la otra alternativa =).