Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: hack-4-life en 15 Octubre 2011, 06:59 am



Título: como forzar la descarga de ficheros de extensiones multiples con PHP?
Publicado por: hack-4-life en 15 Octubre 2011, 06:59 am
Buenas a todos,he estado realizando un scrip que se me ocurrio que tal vez se pueda hacer o tal vez,me paso por la mente,el scrip que quiero hacer es algo sobre descarga de archivos multiples con php o forzar la descarga de multiples extensiones esto es lo que se hace al pasarle un valor a este codigo y forza la descarga

Código
  1. <?php
  2. $enlace ="/".$id;
  3.  
  4. header ("Content-Disposition: attachment; filename=".$id." ");
  5.  
  6. header ("Content-Type: application/octet-stream");
  7.  
  8. header ("Content-Length: ".filesize($enlace));
  9.  
  10. readfile($enlace);
  11.  
  12. ?>
  13.  
  14.  
y esta demas decir que para utizarlo se le pasa la ruta dowload?id=nombrearchivo.x

pero ahora viene lo bueno,lo que yo quiero hacer es que!
lo primero seria renombrar nuestro archivo download_multiple.php y con ese archivo cuando yo lo ejecute que me descargue todo lo que se encuentra en ese directorio ya sean .png,.jpg,.zip,.rar,.pdf,.mp3,.css  ficheros de multiples extensiones por asi decirlo!

buscando me he encontrado con unos codigos que tal vez alguno de ustedes expertos en el area me pudiera sugerir este es con que estoy tratando:

Código
  1. <?php
  2. $file = $_SERVER["DOCUMENT_ROOT"].'/.../.../'.$_GET['file'];
  3.  
  4. if(!file) { // File doesn't exist, output error die('file not found'); } else {
  5.  
  6. //$file_extension = strtolower(substr(strrchr($file,"."),1));
  7. $file_extension = end(explode(".", $file));
  8.  
  9. switch( $fileExtension)
  10. {
  11. case "pdf": $ctype="application/pdf"; break;
  12. case "exe": $ctype="application/octet-stream"; break;
  13. case "zip": $ctype="application/zip"; break;
  14. case "doc": $ctype="application/msword"; break;
  15. case "xls": $ctype="application/vnd.ms-excel"; break;
  16. case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  17. case "gif": $ctype="image/gif"; break;
  18. case "png": $ctype="image/png"; break;
  19. case "jpeg":
  20. case "jpg": $ctype="image/jpg"; break;
  21. default: $ctype="application/force-download";
  22. }
  23.  
  24. nocache_headers();
  25.  
  26. // Set headers
  27. header("Pragma: public"); // required
  28. header("Expires: 0");
  29. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  30. header("Cache-Control: public"); // required for certain browsers
  31. header("Content-Description: File Transfer");
  32. header("Content-Type: $ctype");
  33. header("Content-Disposition: attachment; filename=".$file.";" );
  34. header("Content-Transfer-Encoding: binary");
  35. header("Content-Length: ".filesize($file));
  36.  
  37. readfile($file);
  38. } ?>
  39.  
  40.  
lo que entiendo por este codigo es que me descarga esos tipos de formatos de archivos,pero no se como implementarlo  tambien encontre algo asi creando un arreglo de extensiones de archivos

Código:
<?php
    $extensiones = array("PNG","zip","doc","rar","jpg");
    $f = $_GET["f"];
    if(strpos($f,"/")!==false){
        die("No puedes navegar por otros directorios");
    }
    $ftmp = explode(".",$f);
    $fExt = strtolower($ftmp[count($ftmp)-1]);

    if(!in_array($fExt,$extensiones)){
        die("<b>ERROR!</b> no es posible descargar archivos con la extensión $fExt");
    }

    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$f\"\n");
    $fp=fopen("$f", "r");
    fpassthru($fp);
?>



pero no me funciona siempre me manda aqui y no entiendo si tengo todo bien   
 die("<b>ERROR!</b> no es posible descargar archivos con la extensión $fExt");

y otra cosa que me gustaria implementar es listar todos los archivos de ese directorio para eso lo hago asi:

Código:
<?php
echo "<h3>Index</h3>\n";
echo "<table>\n";
$directorio = opendir(".");
while ($archivo = readdir($directorio))
   {
   $nombreArch = ucwords($archivo);
   $nombreArch = str_replace("..", "Atras", $nombreArch);
   echo "<tr>\n<td>\n<a href='$archivo'>\n";

   echo " border=0>\n";
   echo "<b>&nbsp;$nombreArch</b></a></td>\n";
   echo "\n</tr>\n";
   }
closedir($directorio);
echo "</table>\n";
?>


de esta manera me lista todo el directorio y de ahi partir para forzar la descarga de todos  los ficheros con extensiones que contenga la carpeta! he estado leyendo el api de php pero viene algo parecido pero no le entiendo muy bien! http://php.net/manual/en/function.readfile.php
bueno seguire buscando como implementar para descargar multiples archivos o ficheros con direntes extensiones saludos xd y de antemano gracias!