2010-09-17 17 views
5

Estoy usando PHP para crear un archivo CSV a partir de una consulta de base de datos. Ejecuto la consulta, establezco los encabezados y cargo la página en Firefox, y el archivo pide que se descargue y se abre en Excel como se supone que debe hacerlo. Cuando lo intento en IE, aparece un mensaje de error que dice Internet Explorer cannot download ReportPrint.php from www.website.com.
Internet Explorer was not able to open this Internet site. The requested site is either unavailable or cannot be found. Please try again later.

No estoy seguro de qué se puede hacer para solucionarlo.Creando y descargando CSV con PHP

header('Content-Description: File Transfer'); 
header("Content-Type: application/csv") ; 
header("Content-Disposition: attachment; filename=Report.csv"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

echo "record1,record2,record3\n"; 
+0

Comentario adicional: el encabezado 'Expires' espera una * fecha * –

Respuesta

1

eliminar la cabecera Pragma: no-cache. Este encabezado evita que IE descargue el archivo.

+0

Bueno, esto podría haberlo hecho ... Eliminar no-caché no lo resolvió , pero encontré otro lugar donde descargué archivos PDF de mi sitio y noté algunas líneas que no tenía. Creo que fue 'header (" Pragma: public ")' que lo resolvió. – AndyD273

+0

Parece que eliminar el encabezado fue la solución real para usted. Sin embargo, no es suficiente dejar de agregarlo: PHP puede agregarlo solo si está utilizando sesiones. –

0

Compruebe la configuración de seguridad de IE, puede estar configurada para no descargar archivos CSV.

+0

He comprobado la configuración y no he visto nada. Luego fui a otro sitio web y pude descargar un archivo CSV creado dinámicamente. Por último, creé un CSV estático 'test.csv' y lo descargué muy bien, así que estoy bastante seguro de que tiene algo que ver con los encabezados. – AndyD273

+0

Además, uno de mis compañeros de trabajo intentó y también falló al descargar el CSV generado en una nueva versión de Windows 7. – AndyD273

-2

Cambio

header("Content-Disposition: attachment; filename=Report.csv"); 

a

header("Content-Disposition: attachment;filename=Report.csv"); 
3

Internet Explorer tiende a mostrar estos mensajes de error cuando no es capaz de almacenar en caché el archivo y parece que intenta evitar el almacenamiento en caché. Procurad, más bien algo como esto:

<?php 

$seconds = 30; 

header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$seconds) . ' GMT'); 
header('Cache-Control: max-age=' . $seconds . ', s-maxage=' . $seconds . ', must-revalidate, proxy-revalidate'); 

session_cache_limiter(FALSE); // Disable session_start() caching headers 
if(session_id()){ 
    // Remove Pragma: no-cache generated by session_start() 
    if(function_exists('header_remove')){ 
     header_remove('Pragma'); 
    }else{ 
     header('Pragma:'); 
    } 
} 

?> 

Ajuste $seconds a su gusto, pero no la ponga a cero.

También ayuda a utilizar mod_rewrite a hacer que IE cree que la descarga es un archivo estático, por ejemplo, http://example.com/Report.csv

Por favor, informar y decir si funciona para usted.

+0

Una vez que puse 'Pragma: Public', comenzó a funcionar. Cambiar expira no parece hacer ninguna diferencia ... Dunno – AndyD273

+0

Si no me equivoco, el único valor válido para Pragma es 'no-cache'. Establecerlo en cualquier otra cosa simplemente hace que el navegador lo ignore (ya que no es un valor conocido) y es lo mismo que eliminar el encabezado. De todos modos, me alegra que haya solucionado tu problema. –

+0

Tuve el mismo problema; el encabezado Expires no tuvo ningún efecto, pero simplemente borrar los encabezados Cache-Control y Pragma hizo el truco. +1 – iandisme