Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: Shell Root en 26 Enero 2011, 00:18 AM

Título: Descargar los archivos de una carpeta de un servidor + PHP
Publicado por: Shell Root en 26 Enero 2011, 00:18 AM
Como podría hacer que por ejemplo, toda la carpeta de httpdocs se descargará en mi laptop. Ya sea archivo por archivo -automaticamente- o crear un ZIP o RAR con los archivos y después descargarlo.

Si tiene un script por ahí podrían pasármelo, mientras tanto voy a construirlo. Alguna ayuda?
Título: Re: Descargar los archivos de una carpeta de un servidor + PHP
Publicado por: #!drvy en 26 Enero 2011, 00:48 AM
Suponiendo que la carpeta tiene un index donde hace lista a todos los archivos o que es un script en el mismo host donde estan los archivos ?



Saludos
Título: Re: Descargar los archivos de una carpeta de un servidor + PHP
Publicado por: Shell Root en 26 Enero 2011, 00:49 AM
En el mismo host donde están los archivos.
Título: Re: Descargar los archivos de una carpeta de un servidor + PHP
Publicado por: #!drvy en 26 Enero 2011, 01:19 AM
Código (php) [Seleccionar]

<?php
// drvy
$carpeta 'files/';
$permitidos = array('php','css','html','p0rnxD');
$archivo_final 'descargas.zip';  // .zip *

$zip = new ZipArchive();
if (
$zip->open($archivo_finalZIPARCHIVE::CREATE)==TRUE){
if ($abrir opendir($carpeta)) {
while (false !== ($archivo readdir($abrir))) {
$extension substr($archivostrrpos($archivo'.') + 1);
if (in_array($extension$permitidos)) {
$zip->addFile($carpeta.$archivo,$archivo);
}
}
closedir($abrir);
} else {echo ' no se ha podido abrir la carpeta';}
} else {echo 
'No se ha podido crear un archivo zip!';}
$zip->close();
echo 
'Listo';

?>



Lo hice algo rapidito pero funciona segun probé.



Saludos
Título: Re: Descargar los archivos de una carpeta de un servidor + PHP
Publicado por: Shell Root en 26 Enero 2011, 01:27 AM
Gracias, aun no lo pruebo, pero cabe aclarar a qué dentro de httpdocs hay subcarpetas y así sucesivamente...
Título: Re: Descargar los archivos de una carpeta de un servidor + PHP
Publicado por: #!drvy en 26 Enero 2011, 02:31 AM
Código (php) [Seleccionar]

<?php
//drvy

$carpeta 'files/';
$permitidos = array('php','css');
$archivo_final 'descargas.zip';  // .zip *
$zip = new ZipArchive();
if (
$zip->open($archivo_finalZIPARCHIVE::CREATE)!=TRUE){die('No se ha podido crear un archivo zip!');}

function 
archivar($carpeta,$permitidos,$zip)
{
        
$carpetas scandir($carpeta);
        foreach(
$carpetas as $archivo)
        {
                if ((
$archivo == '.')||($archivo == '..')){}

                elseif (
is_dir($carpeta.'/'.$archivo)){
archivar($carpeta.'/'.$archivo,$permitidos,$zip);

}else{
$extension substr($archivostrrpos($archivo'.') + 1);
if (in_array($extension$permitidos)) {
                        
$zip->addFile($carpeta.'/'.$archivo,$carpeta.'/'.$archivo);
}
                }
        }
}

archivar($carpeta,$permitidos,$zip);
$zip->close();
echo 
'Listo';
?>



Adapte un script que encontré en opendir() (http://www.php.net/manual/en/function.opendir.php#90602) que permitia explorar todos los directorios, sub-directorios.... y las ovejas de las ovejas de una carpeta.

Lo malo es que, una vez creado el ZIP al explorarlo las carpetas no están marcadas como tal pero si son accesibles y funciona todo bien.

PD: Ten en cuenta que si hay muchos directorios y archivos es posible que el max_execution_time se sobre pase y por lo tanto no conseguir nada xD.


Saludos
Título: Re: Descargar los archivos de una carpeta de un servidor + PHP
Publicado por: WHK en 26 Enero 2011, 18:23 PM
recursivo:

Código (php) [Seleccionar]
function comprimir($ruta, $zip_salida, $handle = false, $recursivo = false){

  if(!is_dir($ruta) and !is_file($ruta))
   return false; /* La ruta no existe */

  /* Declara el handle del objeto */
  if(!$handle){
   $handle = new ZipArchive;
   if ($handle->open($zip_salida, ZipArchive::CREATE) === false){
    return false; /* Imposible crear el archivo ZIP */
   }
  }

  /* Procesa directorio */
  if(is_dir($ruta)){
   $ruta = dirname($ruta.'/arch.ext'); /* Aseguramos que sea un directorio sin carácteres corruptos */
   $handle->addEmptyDir($ruta); /* Agrega el directorio comprimido */
   foreach(glob($ruta.'/*') as $url){ /* Procesa cada directorio o archivo dentro de el */
    comprimir($url, $zip_salida, $handle, true); /* Comprime el subdirectorio o archivo */
   }

  /* Procesa archivo */
  }else
   $handle->addFile($ruta);

  /* Finaliza el ZIP si no se está ejecutando una acción recursiva en progreso */
  if(!$recursivo)
   $handle->close();

  return true; /* Retorno satisfactorio */
}