Foros del Web » Programando para Internet » PHP »

Descarga de archivos me dice que están corruptos

Estas en el tema de Descarga de archivos me dice que están corruptos en el foro de PHP en Foros del Web. Hola a todos! Tengo un problema con este código para descargar archivos de mi web. Cuando descargo por ejemplo archivos pdf me dice que está ...
  #1 (permalink)  
Antiguo 23/02/2012, 18:33
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Descarga de archivos me dice que están corruptos

Hola a todos! Tengo un problema con este código para descargar archivos de mi web. Cuando descargo por ejemplo archivos pdf me dice que está corrupto. ¿Por qué puede ser?

Acá el código:
descargas.php
Código PHP:
    $the_array = Array();
    
$handle opendir('descargas/.');

echo 
"<table border='0' width='500'>";
  
$numcolumnas 2;
  if (
$the_array 1) {
      
$i 1;

    while (
false !== ($file readdir($handle))) {
       if (
$file != "." && $file != "..") {
       
$the_array[] = $file;
       }
    }
    
closedir($handle);
    
sort ($the_array);
    foreach(
$the_array as $val){

      
$resto = ($i $numcolumnas);
          if(
$resto == 1){ /*si es el primer elemento creamos una nueva fila*/
      
echo "<tr>";
      }
     echo 
"<td height='27' class='arial-11pxNG'>";
       echo 
"<a href=\"file.php?file=$val\">$val</a><br>";

     echo 
"</td>";/*mostramos el valor del campo especificado*/
      
if($resto == 0){/*cerramos la fila*/
      
echo "</tr>";
      }
      
$i++;
      }
     if(
$resto != 0){/*Si en la &uacute;ltima fila sobran columnas, creamos celdas vac&iacute;as*/
          
for ($j 0$j < ($numcolumnas $resto); $j++){
      echo 
"<td></td>";
      }
      echo 
"</tr>";
      }
  }
echo 
"</table>"
file.php
Código PHP:
$files $_GET['file'];

$file "descargas/".$files;

$extensiones = array("jpg""jpeg""png""pdf""xls");
    
$file $_GET["file"];
    if(
strpos($file,"/")!==false){
        die(
"No puedes navegar por otros directorios");
    }
    
$ftmp explode(".",$file);
    
$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=\"" $file "\"\n");
header("Content-Length: " strlen ($file) );
readfile($file);
$fp=fopen("$file""r");
fpassthru($fp); 
¿Alguna sugerencia del xq no bajan los archivos?

Muchas gracias y saludos.
Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #2 (permalink)  
Antiguo 23/02/2012, 18:37
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Descarga de archivos me dice que están corruptos

puedes prescindir del tag de cierre de PHP (?>) para evitar que caracteres invisibles se cuelen a la salida, además verifica que no exista nada antes de <?php
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 23/02/2012, 18:49
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Descarga de archivos me dice que están corruptos

Cita:
Iniciado por maycolalvarez Ver Mensaje
puedes prescindir del tag de cierre de PHP (?>) para evitar que caracteres invisibles se cuelen a la salida, además verifica que no exista nada antes de <?php
Ah, no... pero el archivo descargas.php tiene html antes y después de lo que yo les mostré. ¿Y entonces, está mal así?
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #4 (permalink)  
Antiguo 24/02/2012, 18:02
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Descarga de archivos me dice que están corruptos

¿Alguien me puede decir donde está el problema?
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #5 (permalink)  
Antiguo 26/02/2012, 18:17
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Descarga de archivos me dice que están corruptos

No hay caso... al archivo file.php le agregé este código y me devuelve el archivo con 0 (cero) bytes y además, los archivos jpg tampoco me los abre.

Código PHP:
$extensiones = array("jpg""jpeg""png""gif""pdf");
    
$f $_GET["file"];
    if(
strpos($f,"descargas/")!==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); 
¿Puede ser que el error esté al principio con el código que escanea los archivos del servidor?
Seguro que es una pavada pero ¿no me pueden hechar una mano?
Gracias.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #6 (permalink)  
Antiguo 26/02/2012, 18:33
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Descarga de archivos me dice que están corruptos

Bueno... avancé un poco más... ahora los archivos jpg me los baja perfecto y me muestra el tamaño. los archivos pdf también ya me muestra el tamaño pero cuando los bajo, NO ME LOS BAJA CON LA EXTENSION PDF, me los baja SIN EXTENSION.

Acá el cod. que modifiqué (era más un tema de rutas)
Código PHP:
$extensiones = array("jpg""jpeg""png""gif""pdf");
    
$f $_GET["file"];
    
$enlace "descargas/".$f;
    if(
strpos($f,"descargas/")!==false){
        die(
"No puedes navegar por otros directorios");
    }
    
$ftmp explode(".",$enlace);
    
$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-Disposition: attachment; filename=".$f);
    
header ("Content-Type: application/octet-stream");
    
header ("Content-Length: ".filesize($enlace));
    
readfile($enlace);
    
$fp=fopen("$enlace""r");
    
fpassthru($fp); 
¿Por qué los PDF no me los baja con su correspondiente extensión?
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #7 (permalink)  
Antiguo 26/02/2012, 18:39
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Descarga de archivos me dice que están corruptos

Listo... el error estaba en esta linea:

Código PHP:
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$f\"\n"); 
Me faltaban las líneas de escape en filename.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:37.