3 Stimmen

PHP Anzeige der CSV-Datei in Internet Explorer

Grüße Experten,

Ich habe ein PHP-Skript, das unsere Datenbank abfragt und eine CSV-Datei in einem Browser ausgibt. Das funktioniert großartig in FireFox, Safari und Chrome. Es funktioniert nicht in Internet Explorer, der standardmäßige Browser in unserem Gebäude (seufz). Ich kann die URL nicht veröffentlichen, da es sich um eine geschützte Website handelt und Ihnen nichts nützen würde.

In IE erhalte ich zwei Popup-Fenster, wenn ich den Link zu diesem Bericht anklicke:

1) Unable to download downloads.html from . Unable to open this Internet Site. The request site is either unavailable or cannot be found Please try again later.

2) ein Fenster für Informationen zu Downloads %: Dateiinformationen werden abgerufen: downloads.html von Verbleibende geschätzte Zeit: Herunterladen nach: Übertragungsrate: alle diese sind leer.

Also, ich habe eine Seite, downloads.html, die versucht, eine CSV-Datei zu erstellen. Ich bin mir nicht sicher, was in IE schiefgeht. Gibt es verschiedene Header, die ich ausprobieren kann? Ich habe bei meiner Suche keine gesehen.

Danke für jegliche Tipps...

Hier ist meine Funktion, die die Daten ausgibt:

# $data ist ein Array von Daten aus der Datenbank
function render_excel($data) {
  # Header für Browser
  header("Content-type: text/csv");
  header("Content-Disposition: attachment; filename=file.csv");
  header("Pragma: no-cache");
  header("Expires: 0");

  # Spaltenüberschriften
  $column_headers = "Filename, Link zur Datei, Details, Eindeutige Betrachter\n";
  $rows = '';
  foreach($data as $foo => $arr){   
    $rows .= $arr['filename'].",";
    $rows .= $arr['resource_url'].",";
    $rows .= $arr['detail_url'].",";
    $rows .= $arr['distinct_views']."\n";
  }
  print $column_headers;
  print $rows;
}

1voto

Hugo Delsing Punkte 13482

Ich denke, es gibt zwei Probleme. Erstens müssen Sie Anführungszeichen um den Dateinamen setzen und zweitens müssen Sie einen Content-Length-Header hinzufügen, um die Download-Zeiten anzuzeigen.

//1
header("Content-Disposition: attachment; filename=\"file.csv\"");

//2
header("Content-Length: " . (strlen($column_headers.$rows)));

Bitte beachten Sie, dass die Länge möglicherweise anders ist, wenn Sie anderen Code auf Ihrer Seite haben.

-1voto

Adrian Punkte 37570

In meiner Erfahrung ist es erforderlich, dies mit IE - insbesondere älteren Versionen von IE - zum Laufen zu bringen, mod_rewrite zu verwenden, um eine URL mit der richtigen Dateierweiterung (z. B. download/file.csv) zu dem PHP-Datei umzuleiten, die die CSV-Ausgabe generiert. IE bevorzugt aus irgendeinem Grund die URL-Dateierweiterung gegenüber den Inhalten-Typ und Inhalts-Disposition Header.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X