Foros del Web » Programando para Internet » PHP »

Problema al descargar archivos y session_start

Estas en el tema de Problema al descargar archivos y session_start en el foro de PHP en Foros del Web. Hola a todos una vez más. En esta ocasion me ha surgido un problemita que os paso a contar: Tengo un código que llevo usando ...
  #1 (permalink)  
Antiguo 20/05/2009, 19:06
 
Fecha de Ingreso: febrero-2008
Mensajes: 74
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta Problema al descargar archivos y session_start

Hola a todos una vez más.
En esta ocasion me ha surgido un problemita que os paso a contar:

Tengo un código que llevo usando algun tiempo para descarga de archivos (el tipico "descargar.php" que oculta la ruta).
Estas son las cabeceras que uso y lo hacen perfecto (Tanto en IE como Firefox y mas ...):

Código PHP:
header ("Content-Type: ".$datos_archivo['tipo_archivo']."");    
header ("Content-Disposition: attachment; filename=".$datos_archivo['nombre_archivo']."\n\n"); 
header ("Content-Length: ".filesize($ruta));
readfile($ruta); 
La cuestión viene a raiz de querer restringir el acceso a los archivos unicamente a los usuarios registrados ya que es posible que se conozca la url.
Entonces uso un session_start y verifico que se trate de un usuario válido y de lo contrario no descargue dicho archivo.

El caso es que cuando uso session_start junto con las cabeceras header para descargar el archivo, en iexplorer solo me permite abrirlo y en el nombre del archivo me aparece el descargar.php... por lo que no me permite guardarlo. (Firefox lo hace perfecto, todo sea dicho.)

No se si alguien se habrá topado con algo parecido en alguna ocasión.
Muchas gracias de antemano y Saludos!
  #2 (permalink)  
Antiguo 21/05/2009, 01:58
Usuario no validado
 
Fecha de Ingreso: octubre-2008
Ubicación: BRUSELAS
Mensajes: 211
Antigüedad: 15 años, 5 meses
Puntos: 3
Respuesta: Problema al descargar archivos y session_start

pon tu codigo para ver si tienes alguna fallo:

bueno te dejo un pseudocodigo de como deberias hacerlo..

session_start();
if(isset($_SESSION['variable']))
{
//descargar archivo
..codigo para descargar archivo
}
else
{
//aqui podrias poner algo para redireccionar
//ya que si no entra en la primera parte del if la pagina se cargaria completamente..
//con un header("Location: ...") puedes redireccionar
}


suerte
  #3 (permalink)  
Antiguo 21/05/2009, 04:47
 
Fecha de Ingreso: febrero-2008
Mensajes: 74
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema al descargar archivos y session_start

Hola gracias por tu respuesta. Mira este es el codigo sin la validacion de usuario que funciona perfectamente:

Código PHP:
<?php
  
require_once("../funciones/funciones_todas.php");
    
$datos_archivo=recuperar_datos_archivo_id($_GET["doc"]);
    
$ruta"../".$datos_archivo['ruta'];

    
header ("Content-Type: ".$datos_archivo['tipo_archivo']."");
    
header ("Content-Length: ".filesize($ruta));
    
header ("Content-Disposition: attachment; filename=".$datos_archivo['nombre_archivo']."\n\n");
    
readfile($ruta);
?>
Y este es el codigo ya incluyendo que la session este iniciada y con el correspondiente location si no:

Código PHP:
<?php
  session_start
();
  require_once(
"../funciones/funciones_todas.php");

  if (isset(
$_SESSION['valid_user']))
  {
    
$datos_archivo=recuperar_datos_archivo_id($_GET["doc"]);
    
$ruta"../".$datos_archivo['ruta'];

    
header ("Content-Type: ".$datos_archivo['tipo_archivo']."");
    
header ("Content-Length: ".filesize($ruta));
    
header ("Content-Disposition: attachment; filename=".$datos_archivo['nombre_archivo']."\n\n");
    
readfile($ruta);
  }
  else
  
header("Location: ...);
?>
El problema viene con Intertet Explorer, que cuando doy al documento a descargar no identifica correctamente el nombre y escribe el del archivo. Si le doy a Abrir lo abre perfectamente, pero si le doy a Guardar ahi esta el problema.
He probado en Safari, Firefox, Opera, Google Chrome y todos lo Guardan perfectamente con el nombre del archivo, excepto IE que muestra lo siguiente:



Espero haber sido un poco mas claro.
He probado algunas cosas y el problema viene con el session_start que por supuesto no puedo quitar.
Muchas gracias y saludoss!
  #4 (permalink)  
Antiguo 21/05/2009, 05:12
Usuario no validado
 
Fecha de Ingreso: octubre-2008
Ubicación: BRUSELAS
Mensajes: 211
Antigüedad: 15 años, 5 meses
Puntos: 3
Respuesta: Problema al descargar archivos y session_start

Cita:
Iniciado por bysv Ver Mensaje
Código PHP:
<?php
  session_start
();
  require_once(
"../funciones/funciones_todas.php");

  if (isset(
$_SESSION['valid_user']))
  {
    
$datos_archivo=recuperar_datos_archivo_id($_GET["doc"]);
    
$ruta"../".$datos_archivo['ruta'];

    
header ("Content-Type: ".$datos_archivo['tipo_archivo']."");
    
header ("Content-Length: ".filesize($ruta));
    
header ("Content-Disposition: attachment; filename=".$datos_archivo['nombre_archivo']."\n\n");
    
readfile($ruta);
  }
  else
  
header("Location: ...);
?>
header("Location: aqui tienes que poner la pagina hacia donde quieres ir");

quita todos los header que tienes y pon un echo de la variable $datos_archivo['nombre_archivo'], para ver lo que contiene

otra pregunta no sera por el
require_once("../funciones/funciones_todas.php");??
necesitas esas funciones para descargar el archivo??
  #5 (permalink)  
Antiguo 21/05/2009, 05:29
 
Fecha de Ingreso: febrero-2008
Mensajes: 74
Antigüedad: 16 años, 2 meses
Puntos: 0
Hola de nuevo fatasma!
Te comento, en el header location no he puesto la pagina porq no es vital, no es que se me haya olvidado .

El require de las funciones es necesario para incluir la funcion recuperar_datos_archivo_id por la que obtengo la ruta del archivo guardada en la base de datos en la linea:
Código PHP:
$datos_archivo=recuperar_datos_archivo_id($_GET["doc"]); 
Donde $datos_archivo recoje los datos del archivo que le pasamos con $_GET["doc"].

$datos_archivo si contiene los datos de forma correcta ya que como decia al principio, usando la primera de las formas (sin la validacion de usuarios) funciona perfectamente, y de la segunda únicamente falla en iexplorer que no se entera del nombre del archivo y no me deja guardarlo correctamente. Y el caso es que si le doy a Abrir sale el archivo en cuestion.
Ya se que es un poco raro, pero creo que interfiere el session_start con alguna de las cabeceras sólo en Iexplorer y no entiendo porqué. ("Cada dia amo mas IE, jaja")

Muchas gracias

Hola de nuevo a todos.
En los casos anteriores que comentaba era usando archivos graficos (jpg y gif), pero el problema es aun mayor ahora que ando probando con .pdf ya que salta directamente el mensaje de "Internet explorer no puede descargar ... bla bla".

De igual manera el resto de navegadores no tienen problemas para ningun tipo de archivo de los que toy probando.

¿Puede ser que Internet explorer interprete las cabeceras header de distinta manera cuando existen variables de sesion en el mismo script? Esque todavia no me logro explicar porqué si quitamos la validacion de los usuarios del script hace todo perfecto.

Estoy un poco confuso porq ya no se que mas probar ni donde buscar.

Muchas gracias.

Última edición por GatorV; 21/05/2009 a las 09:19
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.
Tema Cerrado




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