Foros del Web » Programando para Internet » PHP »

Download de archivos funciona en IE pero en FF no

Estas en el tema de Download de archivos funciona en IE pero en FF no en el foro de PHP en Foros del Web. Hola a todos! Tengo el siguiente código para que los usuarios de mi web bajen archivos pdf y xls que son los únicos que subo: ...
  #1 (permalink)  
Antiguo 11/02/2012, 12:08
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Download de archivos funciona en IE pero en FF no

Hola a todos! Tengo el siguiente código para que los usuarios de mi web bajen archivos pdf y xls que son los únicos que subo:
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>"
Y el archivo file.php
Código PHP:
$file $_GET['file'];

$enlace "descargas/".$file;
//$enlace = $path_a_tu_doc."/".$file;
header ("Content-Disposition: attachment; filename=".$file);
//header ("Content-Disposition: attachment; filename=".$file."nn");
header ("Content-Type: application/octet-stream");
header ("Content-Length: ".filesize($enlace));
readfile($enlace); 
El problema es que en IE lo baja perfecto, pero con FF, cuando me da la opción de guardar como no me aparece el nombre del archivo, sino que me guarda un archivo sin extensión ni nada.

Si quieren pueden hacer la prueba con IE y con FF acá

¿Alguna sugerencia del por què suscede esto?

Muchas gracias y saludos.
Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #2 (permalink)  
Antiguo 11/02/2012, 12:40
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Download de archivos funciona en IE pero en FF no

Pues sí, parece extraño... la razón por la que lo hace no te la puedo decir, pues no veo nada raro, aunque te muestro el código que yo manejo y que no da este problema:


Código PHP:
Ver original
  1. header("Pragma: public");
  2.     header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
  3.     header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  4.     header("Cache-Control: private",false);
  5.     header("Content-Description: File Transfer");
  6.     header("Content-Type: application/force-download");
  7.     header("Content-Length: " . filesize ("$fil"));
  8.     header("Content-Disposition: attachment; filename=".$fil);
  9.     echo file_get_contents("$fil");
por cierto, si este es tu código final, deberías considerar validar el tipo de archivos que pueden descargar, ya que sin validar, podrían descargar tu código de la base de datos o cualquier cosa.
  #3 (permalink)  
Antiguo 11/02/2012, 12:50
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Download de archivos funciona en IE pero en FF no

Ah! no lo había pensado de esa manera... ¿y como puedo hacerlo?
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #4 (permalink)  
Antiguo 11/02/2012, 12:59
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Download de archivos funciona en IE pero en FF no

Pues de entrada, podrías verificar que el nombre del archivo a descargar no tenga extensión php, o bien cualquier otra extensión que quieras evitar.
Otra es la ruta del archivo, yo por ejemplo tengo limitado a que las descargas son siempre en la carpeta "uploads", por lo que siempre que se haga una descarga busca que se encuentre en dicha carpeta, si no, no lo permite.
  #5 (permalink)  
Antiguo 11/02/2012, 14:03
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Download de archivos funciona en IE pero en FF no

Holas,

En el archivo file.php, cuando recibas el nombre del archivo o el valor de la variable file, tiene que estar con url_encode, y esto lo puedes formatear desde donde imprimes el link o sino en el file.php reemplaza los espacios por un "_" o sino "-":

Código PHP:
Ver original
  1. $file = $_GET['file'];
  2. ....
  3. $nombreFile = str_replace(" ","_",$file);
  4. ....
  5.  
  6. header ("Content-Disposition: attachment; filename=".$nombreFile);
Saludos
__________________
.: Gildus :.
  #6 (permalink)  
Antiguo 11/02/2012, 18:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Download de archivos funciona en IE pero en FF no

También tienes que escapar las comillas:

Código PHP:
Ver original
  1. header ("Content-Disposition: attachment; filename=\"$nombreFile\"");

Saludos.
  #7 (permalink)  
Antiguo 11/02/2012, 18:32
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 13 años, 3 meses
Puntos: 61
Respuesta: Download de archivos funciona en IE pero en FF no

podrias probar de esta forma ,

Código PHP:
Ver original
  1. <?php
  2.     $extensiones = array("jpg", "jpeg", "png", "gif");
  3.     $f = $_GET["f"];
  4.     if(strpos($f,"/")!==false){
  5.         die("No puedes navegar por otros directorios");
  6.     }
  7.     $ftmp = explode(".",$f);
  8.     $fExt = strtolower($ftmp[count($ftmp)-1]);
  9.  
  10.     if(!in_array($fExt,$extensiones)){
  11.         die("<b>ERROR!</b> no es posible descargar archivos con la extensión $fExt");
  12.     }
  13.  
  14.     header("Content-type: application/octet-stream");
  15.     header("Content-Disposition: attachment; filename=\"$f\"\n");
  16.     $fp=fopen("$f", "r");
  17.     fpassthru($fp);
  18. ?>
  19.  
  20.  
  21. saludos
  #8 (permalink)  
Antiguo 11/02/2012, 21:34
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Download de archivos funciona en IE pero en FF no

Chicos! Mil gracias a todos por sus consejos. Probé lo que me dijeron y me funcionó de maravillas.

Les mando un gran abrazo y saludos.

MArx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.

Etiquetas: download, usuarios
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 05:14.