3

我正在尝试下载带有 php 标头的动态生成的 excel 文件:

$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');

但这在 IE8 上不起作用(但在其他一些带有 IE8 的电脑上工作???!!)。IE8 尝试下载 export.php 文件而不是 assets.xls。知道为什么 IE8 会这样做吗?

4

6 回答 6

5

尝试按照 HTTP 规范正确格式化标头,在文件名和文件名之间使用空格;filename引号:

header('Content-Disposition: attachment; filename="' . $filename . '"');
于 2012-05-28T09:09:00.833 回答
3

我遇到了同样的问题。我使用以下方法来解决问题。

header("Cache-Control: private");
header("Content-Type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=$filename");
于 2014-01-06T06:32:51.013 回答
2

我有一个类似的问题。我在 Content-Deposition 标头之前添加了以下标头。

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

它似乎对我有用。但是,您必须先保存文件。你不能马上打开。

于 2012-11-19T20:30:10.677 回答
1

我有完全相同的问题!刚刚通过删除“Content-Type”标头使其工作,所以我猜 IE8 不能很好地与该类型一起使用..?目前还不确定最好的选择是什么,但这绝对是我的球员。

于 2012-06-01T19:46:26.357 回答
0

尝试这个:

$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;
于 2013-03-01T14:32:54.463 回答
0

在试图解决一个类似的问题一整个下午后,我发现了这个设置

header("Cache-Control: private");

是最好的解决方案。我已经尝试过确保Content-Length,Content-TypeContent-Disposition已设置并正确格式化。问题实际上是新的 IE8 窗口和选项卡似乎不像第一次发生时通过 PHP 标头发送的下载。在初次尝试后重试文件时,它工作正常(在我的情况下)。

Cache-Control如上所述设置后,我的所有链接在 IE8 中都可以正常工作。

于 2016-02-17T17:34:24.247 回答