PHPExcel输出到浏览器没有';我不在IE工作


PHPExcel output to browser doesn't work in IE

我有一个PHP脚本,它使用PHPExcel打开模板,插入数据库查询中的值,然后将结果返回到浏览器。它在Firefox中运行得很好,但在Internet Explorer(8)中,当它试图打开文件时,它会中断:

Internet Explorer无法从my.domain.下载generate.php

Internet Explorer无法打开此Internet站点。这个请求的站点不可用或找不到。请尝试稍后再次。

我使用的代码(generate.php)如下:

// Open template
$xlRead = PHPExcel_IOFactory::createReader('Excel5');
$xl = $xlRead->load('Template.xls');
$xl->setActiveSheetIndex(0);
// Write data
$xl->getActiveSheet()->fromArray($dbOutput, null, 'A1');
// Output to browser
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename=MyReport.xls');
$xlWrite = PHPExcel_IOFactory::createWriter($xl, 'Excel5');
$xlWrite->save('php://output')

EDIT似乎这个问题只会在SSL之后影响IE。因此,这是一个与几个类似SO问题相同的问题。人们的建议是调整标题,但到目前为止,我所看到的解决方案的组合还没有奏效。。。

如果以上都不适用,并且您仍然希望在SSL下运行,您可以始终将文件写入磁盘并提供下载链接,或者您可以提示用户输入电子邮件地址并将文件作为附件发送电子邮件。如果你使用电子邮件,PHPMailer有一种相当简单的发送附件的方法。我不能100%确定,但我认为在使用PHPMailer附加文件之前,需要将文件写入磁盘,但您可以在发送后立即取消文件链接。

这一切都归结为IE对您设置的标头的处理。微软自己对这个已知问题的回答应该会为你解决问题。

他们的解决方案摘要:"删除一个或多个无缓存标头。"