2010-09-17 18 views
5

Sto utilizzando PHP per creare un file CSV da una query di database. Eseguo la query, imposta le intestazioni e carica la pagina in Firefox e il file richiede il download e si apre in Excel esattamente come dovrebbe. Quando provo in IE, viene visualizzato un messaggio di errore che indica 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.

Non so cosa si possa fare per risolvere questo problema.Creazione e download di 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

Commento a margine: l'intestazione 'Scadenza' si aspetta una * data * –

risposta

1

rimuovere l'intestazione Pragma: no-cache. Questa intestazione impedisce a IE di scaricare il file.

+0

Bene, questo potrebbe averlo fatto ... Rimozione di no-cache non lo ha risolto , ma ho trovato un altro posto dove ho scaricato i file PDF dal mio sito e ho notato alcune righe che non avevo. Penso che sia stato 'header (" Pragma: public ")" che lo ha risolto. – AndyD273

+0

Sembra che rimuovere l'intestazione fosse la vera soluzione per te. Tuttavia, non è sufficiente smettere di aggiungerlo: PHP può aggiungerlo da solo se si stanno utilizzando le sessioni. –

0

Controllare le impostazioni di sicurezza di IE, può essere è configurato per non scaricare i file CSV.

+0

Ho controllato le impostazioni e non ho visto nulla di preciso. poi sono andato su un altro sito Web e ho potuto scaricare un CSV creato dinamicamente. Infine ho creato un file CSV 'test.csv' che è stato scaricato correttamente, quindi sono abbastanza sicuro che abbia qualcosa a che fare con le intestazioni. – AndyD273

+0

Inoltre, uno dei miei colleghi ha provato e non è riuscito a scaricare il CSV generato su una nuova versione di Windows 7. – AndyD273

-2

Change

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

a

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

Internet Explorer tende a visualizzare questi messaggi di errore quando non è in grado di memorizzare nella cache il file e sembra che si stia cercando di evitare la memorizzazione nella cache. Prova invece qualcosa di simile:

<?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:'); 
    } 
} 

?> 

Regolare $seconds a proprio piacimento, ma non impostare a zero.

Essa contribuisce anche a usare mod_rewrite per fare IE credere che il download è un file statico, per esempio, http://example.com/Report.csv

Si prega di segnalare indietro e dire se funziona per voi.

+0

Una volta inserito 'Pragma: Public', ha iniziato a funzionare. Cambiare le scadenze non sembrava fare alcuna differenza ... Non so – AndyD273

+0

Se non sbaglio, l'unico valore valido per Pragma è 'no-cache'. Impostandolo su qualsiasi altra cosa, basta che il browser lo ignori (poiché non è un valore noto) ed è come rimuovere l'intestazione. Ad ogni modo, sono contento che abbia risolto il problema. –

+0

Ho avuto lo stesso problema; l'intestazione Expires non ha avuto alcun effetto, ma semplicemente eliminando le intestazioni di Cache-Control e Pragma ha funzionato. +1 – iandisme