我有一个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')
编辑似乎此问题仅在SSL后面影响IE。因此,这与几个类似的SO问题是相同的问题。人们的建议是调整标题,但到目前为止,我所看到的解决方案的组合并没有起作用......
答案 0 :(得分:3)
如果以上都不适合您,并且您仍希望在SSL下运行,则可以始终将文件写入磁盘并提供下载链接,或者您可以提示用户输入电子邮件地址并通过电子邮件发送文件作为附件。如果你去电子邮件路线,PHPMailer有一个相当简单的方式发送附件。我不是100%肯定,但我认为在使用PHPMailer附加文件之前需要将文件写入磁盘,但是您可以在发送后立即取消链接文件。
答案 1 :(得分:1)
这一切都归结为IE对你设置的标题的处理。 Microsoft's own answer这个已知问题应该为你解决问题。
他们的解决方案摘要:“删除无缓存标头或标头。”