Foros del Web » Programando para Internet » PHP »

Problema forzar descarga de archivos muy grandes

Estas en el tema de Problema forzar descarga de archivos muy grandes en el foro de PHP en Foros del Web. Buenas. El problema es que tengo que forzar la descarga de archivos, y me funciona todo perfectamente, pero cuando el archivo es grande, hablemos de ...
  #1 (permalink)  
Antiguo 24/01/2008, 11:45
 
Fecha de Ingreso: enero-2008
Mensajes: 3
Antigüedad: 12 años
Puntos: 0
Problema forzar descarga de archivos muy grandes

Buenas. El problema es que tengo que forzar la descarga de archivos, y me funciona todo perfectamente, pero cuando el archivo es grande, hablemos de 2 gigas por ejemplo, se me corta en cierto momento (no suele coincidir en diferentes pruebas, ni el tiempo que lleva ni el tamaño de descarga...)

Uso este código

header("Pragma: private"); //
header("Expires: 0"); //
header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header ("Content-Type: application/octet-stream");
header ("Content-Disposition: attachment; filename=\"$archivozip\""); //
header ("Content-Length: $peso");

readfile ($nombrezip);


El caso es que he probado la descarga directa a través de http y de https y en ambos casos y con navegadores distintos funciona perfectamente, así que el problema tiene que estar en el PHP. Es decir, pongo el archivo en una carpeta pública y lo bajo directamente a través del navegador, y eso no da problemas.

Es desquiciante, he probado con readfile, fgets, fread...comandos de sistema como cat(nombrearchivo), y no hay manera.

¿Alguien sabe como solucionarlo? Espero sus respuestas.

Muchas gracias de antemano y un saludo.
  #2 (permalink)  
Antiguo 24/01/2008, 12:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 8 meses
Puntos: 2135
Re: Problema forzar descarga de archivos muy grandes

El problema no es PHP, si no el tiempo de ejecución de tu script, prueba antes de poner el readfile esta función:
Código PHP:
set_time_limit); 
Saludos.
  #3 (permalink)  
Antiguo 25/01/2008, 09:42
 
Fecha de Ingreso: enero-2008
Mensajes: 3
Antigüedad: 12 años
Puntos: 0
Re: Problema forzar descarga de archivos muy grandes

Muchas gracias GatorV, tu respuesta me ha salvado el culo, mi jefe ya no echa chispas ja ja ja.

De todas formas hay un parámetro en las opciones de php.ini que indica el máximo tiempo de ejecución del script y está puesto a 30 segundos, pero ese no es el problema porque siempre pasaba de los 30 segundos durante la descarga.

Por eso, aunque funcione, no acabo de entender la función set_time_limit(). Por defecto tiene algún otro valor? Tampoco se llegaba a cortar por tiempo, según en qué ordenador y el navegador usado se cortaba al pasar un tiempo determinado... Parecía que dependía más de los bytes que llevaba descargados...

Bueno, me gustaría una explicación lógica del asunto, pero aún así muchas gracias.

César.
  #4 (permalink)  
Antiguo 25/01/2008, 09:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 8 meses
Puntos: 2135
Re: Problema forzar descarga de archivos muy grandes

Es el tiempo limite de ejecución, cuando tu bajas un archivo, readfile, lee el archivo y lo envía al cliente (es decir lo imprime en el buffer) y ya el servidor y la velocidad de conexión se encarga de enviar el resultado al cliente.

Cuando el archivo era muy grande, readfile se tardaba mas de 30 segundos en leer el archivo, por lo que se cortaba en X cantidad de bytes.

Saludos.
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 16:27.