我正在尝试使用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会这样做吗?
答案 0 :(得分:5)
尝试使用;
和filename
之间的空格正确格式化标题as per the HTTP spec,并在文件名周围加上引号:
header('Content-Disposition: attachment; filename="' . $filename . '"');
答案 1 :(得分:3)
我遇到了同样的问题。我使用以下方法来解决问题。
header("Cache-Control: private");
header("Content-Type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=$filename");
答案 2 :(得分:2)
我遇到了类似的问题。我在Content-Deposition标头之前添加了以下标头。
header("Content-type: text/csv");
header("X-Download-Options: noopen");
header("Content-Disposition: attachment; filename=\"ExcelFileName.csv\"");
这似乎对我有用。但是,您必须先保存文件。你不能马上打开。
答案 3 :(得分:1)
我有完全相同的问题!通过删除'Content-Type'标题让它工作,所以我猜IE8不适合那种类型..?还不确定最好的选择是什么,但这绝对是我的选手。
答案 4 :(得分: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;
答案 5 :(得分:0)
在整个下午尝试与类似问题作斗争后,我发现了设置
OnNavigatedTo
是最好的解决方案。
我已经尝试确保header("Cache-Control: private");
,Content-Length
和Content-Type
已设置且格式正确。
问题实际上是新的IE8窗口和标签似乎不喜欢第一次发生时通过PHP标头发送的下载。
在初始尝试后重试文件时,它可以正常工作(在我的情况下)。
如上所述设置Content-Disposition
后,我的所有链接在IE8中都没有问题。