¿No se puede descargar el archivo en IE7 pero no hay ningún problema en Firefox, Chrome, etc.?
-
02-07-2019 - |
Pregunta
Tengo un script que recibe una URL cifrada y a partir de ahí genera una descarga, la parte más crítica del script es esta:
$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');
}
Las descargas funcionan de maravilla en cualquier navegador excepto IE, he visto problemas relacionados con encabezados 'sin caché' pero no envío nada de eso, hablan de caracteres utf-8, pero no hay ninguno. utf-8 characters
(y el $filename tampoco tiene caracteres utf-8).
Solución
Este sitio tiene un problema similar al tuyo en IE6.Para resumir:
session_start() envía de forma predeterminada un encabezado de control de caché que incluye "no-store".Internet Explorer toma esto demasiado literalmente, pero no tiene un manejo de errores adecuado para el caso, y como resultado explota crípticamente cuando intenta guardar la página de salida en el disco.
Antes de session_start (), agregue "session_cache_limiter ('none');", o busque esa función y ajuste el limitador según corresponda (probablemente 'privado' está más cerca de la marca).
Me doy cuenta de que el fragmento de código que publicaste no incluye una llamada a session_start();
, pero pensé en compartir esta posible solución en caso de que recibas una llamada y simplemente no nos la muestres.
Otros consejos
Lo resolví enviando los encabezados.
header('Pragma: public');
header('Cache-Control: max-age=0');
No sabía que session_start() envía encabezados por sí solo.
Encontré la respuesta en la sección de comentarios de: Error:Internet Explorer no puede descargar el nombre del archivo desde el servidor web
Utilizar esta
En el navegador IE7, vaya a la opción de Internet-> Seguridad ---> Nivel personalizado ---> Descargas y luego habilitó la solicitud automática para la descarga de archivos.
Esto solucionará el problema.
Espero que esto ayude