3 Stimmen

Download mit PHP mit Headern funktioniert nicht in IE8

Ich versuche, eine Excel-Datei herunterzuladen, die mit PHP-Headern generiert wird:

$filename = "assets.xls";
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=$filename");
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');

Aber das funktioniert nicht in IE8 (aber auf einigen anderen PCs mit IE8 funktioniert es???!!). IE8 versucht, die export.php-Datei anstelle von assets.xls herunterzuladen. Irgendwelche Ideen, warum IE8 das tut?

5voto

deceze Punkte 489288

Versuchen Sie, den Header gemäß der HTTP-Spezifikation korrekt zu formatieren mit einem Leerzeichen zwischen ; und filename und Anführungszeichen um den Dateinamen:

header('Content-Disposition: attachment; filename="' . $filename . '"');

0 Stimmen

+1 Außerdem, für ein besseres Erlebnis, sollten Sie, wo verfügbar, Content-Length hinzufügen.

0 Stimmen

Lass es uns versuchen, aber ich bin mir nicht sicher, ob das Problem hier liegt. Auf einigen IE8-Maschinen funktioniert es, auf anderen nicht.

0 Stimmen

Nicht sicher, ob das Problem auch dort ist, aber es ist offensichtlich falsch gemäß der Spezifikation und kann möglicherweise Probleme verursachen.

3voto

Crazy Crab Punkte 603

Ich bin auf dasselbe Problem gestoßen. Und ich verwende die folgende Methode, um das Problem zu beheben.

header("Cache-Control: private");
header("Content-Type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=$filename");

2voto

muhzak Punkte 52

Ich habe ein ähnliches Problem. Ich habe den folgenden Header vor dem Content-Deposition-Header hinzugefügt.

header("Content-type: text/csv");
header("X-Download-Options: noopen");
header("Content-Disposition: attachment; filename=\"ExcelFileName.csv\"");

Es scheint für mich zu funktionieren. Allerdings musst du die Datei zuerst speichern. Du kannst sie nicht sofort öffnen.

1voto

Ryan King Punkte 11

Ich habe genau das gleiche Problem! Habe es gerade zum Laufen gebracht, indem ich den 'Content-Type'-Header entfernt habe, also denke ich, dass IE8 damit nicht gut umgehen kann..? Bin mir noch nicht sicher, was die beste Alternative ist, aber das ist definitiv der Player für mich.

1 Stimmen

Gerade habe ich es zum Laufen gebracht, indem ich einen Aufruf zu "header_remove();" hinzugefügt habe, bevor die normalen Header-Aufrufe starten.

0voto

user1010432 Punkte 11

Versuchen Sie dies:

$filename   =   'Excel_Sheet_'.date('Ymd').".xls";

header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Type: application/vnd.ms-excel; "); 
header("Content-Transfer-Encoding: binary");
header('Cache-Control: max-age=0');
ob_clean();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;

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