2008-09-22 8 views
5

Tengo una secuencia de comandos que recibe una url cifrado y de que genera una descarga, el crítico par la mayor parte de la secuencia de comandos es la siguiente: problemasNo se puede descargar el archivo en IE7 pero no hay ningún problema en Firefox, Chrome, etc.?

$MimeType = new MimeType(); 
$mimetype = $MimeType->getType($filename); 
$basename = basename($filename); 
header("Content-type: $mimetype"); 
header("Content-Disposition: attachment; filename=\"$basename\""); 
header('Content-Length: '. filesize($filename)); 
if (@readfile($filename)===false) { 
    header("HTTP/1.0 500 Internal Server Error"); 
    loadErrorPage('500'); 
} 

Descargas funciona como encanto en cualquier navegador, excepto IE, que he visto relacionado a los encabezados 'no-caché' pero no envío nada de eso, hablan de caracteres utf-8, pero no hay ningún utf-8 characters (y el $ nombredearchivo no tiene ningún carácter UTF-8 tampoco).

+0

"Funciona excepto en IE" no es útil en absoluto. ¿Cómo no funciona? ¿Hay un mensaje de error? Un tiempo de espera? ¿Muestra el contenido del archivo? ¿Descarga algo incorrecto? – Jim

+0

tiempo de espera básicamente, aparece una ventana de descarga pero nunca avanza, después de un par de minutos de tiempo de espera que dice: "Internet Explorer no puede descargar FileName del servidor web" – levhita

Respuesta

3

This site tiene un problema similar al suyo en IE6. Para resumir:

session_start() de forma predeterminada envía un encabezado de control de caché que incluye "no-store". Internet Explorer toma esto un poco demasiado literalmente, pero no tiene el manejo de error apropiado para el caso, y como resultado explota crípticamente cuando intenta guardar la página de salida en el disco.

Antes session_start(), agregue "session_cache_limiter ('none');", ni busque que función y ajustar el limitador en su caso (probablemente 'privado' está más cerca de la marca ).

realizo el fragmento de código que has publicado no incluye una llamada a session_start();, pero pensé que había que compartir esta posible solución en el caso de tener una llamada a ella y simplemente no nos muestran.

+0

Sí, hay un session_start() sobre todo, simplemente publico ese código porque es un código muy largo. – levhita

0

Utilice esta

En IE7 navegador ir a la opción de Internet -> Seguridad ---> ---> Nivel personalizado descargas entonces habilitadas Indicaciones autométicas para la descarga de archivos.

esto resolverá el problema.

Espero que esto ayude

+0

Realmente no se puede pedir a todos sus usuarios que hagan lo mismo :) – Luk

Cuestiones relacionadas