2009-08-02 20 views
11

Tengo un script que toma una clave de $ _GET ['clave'], busca la ubicación en una base de datos y usa el archivo de lectura junto con algunos encabezados para presentar una descarga para el utilizar. Esto funciona en Firefox pero no en IE8, no se ha podido probar en otro IE. Aparece el siguiente error en IE: "Internet Explorer no puede descargar download.php desde www.example.com". Como si estuviera intentando descargar el script PHP.Script PHP para descargar el archivo que no funciona en IE


$the_query = "SELECT * FROM `files` WHERE `user_id`=" . $_SESSION['user_id'] . " AND `key`='" . $key . "'"; 

$result = mysql_query($the_query); 
$row = mysql_fetch_array($result); 

$file = '/var/www/vhosts/www.example.com/httpsdocs/uploads/' . $row['id'] . '/' . $row['file']; 

header("Content-type: application/octet-stream"); 
header("Content-length: ".filesize($file)); 
header('Content-Description: File Transfer'); 
header("Cache-control: private"); 
header('Content-Disposition: attachment; filename=' . rawurlencode(basename($file))); 
readfile($file); 
+4

eche un vistazo a la inyección SQL y mysql_real_escape_string. Esta pieza de código es vulnerable. – erenon

+0

Oh señor sí, por favor use mysql_real_escape_string – AaronLS

+0

No sé mucho sobre esto, pero puede tener algo que ver con la extensión de archivo en $ archivo – AaronLS

Respuesta

28

Para resolver el error: "Internet Explorer no puede descargar download.php de www.example.com", Añadir estas cabeceras a su script:

header("Pragma: ");

header("Cache-Control: ");

El código se elimina el Cache-Control de los encabezados, lo que hace que el problema de descarga.

El código anterior debe agregarse en la parte superior del archivo.

Funciona bien para nosotros.

+0

Gracias a Million por salvar mi vida de Alien Bugs viniendo de Planet mars ... Nunca supe lo que puedo hacer pero tu esta armadura tuya me ayudó a matar a este ERROR MUY MUY GRANDE ... El insecto está muerto ... ¡SI! ... Gracias :-) – effkay

+0

Dimos vueltas con este problema. intenté muchas recomendaciones de publicaciones de blog, etc. ¡Esta fue la que lo arregló! – BishopZ

3

Reemplazar esta:
header("Content-type: application/octet-stream");
con esto:
header("Content-Type: application/force-download");

De acuerdo con esta post, IE normalmente no escucha a sus cabeceras, y en su lugar se ve por sí mismo lo que está enviando.

+0

Ya lo intenté antes, el mismo error lamentablemente, gracias. – Stuart

+1

'application/octet-stream' es el tipo de medio MIME oficial para los datos que se pretende descargar (ver RFC 2046). – Gumbo

+0

Me pregunto cómo las personas conocen todos los RFC? –

0

Sólo un consejo, si alguien (como yo) se enfrenta a problemas con la introducción directa en el FileDownload barra de direcciones usando una https-solicitud segura. Hay un fallo de IE que está causando esta descarga para fallar:

http://support.microsoft.com/kb/323308/en-us

única solución parece ser el establecimiento de las cabeceras de cache-de acuerdo con el artículo.

0

Nunca reemplace esto: header ("Content-type: application/octet-stream");

con esto: header ("Content-Type: application/force-download");

"application/octet-stream" es simplemente el más universal y funciona en la mayoría de los navegadores.

Intenté usar "aplicación/zip" en una de mis pruebas ya que técnicamente estaba tratando con un archivo ZIP, pero IE6.0 corrompió la descarga. Sin embargo, todo lo demás se comportó normalmente. Pero sí, tuvo que volver a "application/octet-stream" para que cualquier código que intente detectar la extensión de archivo y cambiar a otros tipos de contenido específicos de la extensión sea arriesgado. ¡Es mejor utilizar "application/octet-stream" para TODOS los archivos binarios!

Cuestiones relacionadas