1

我有一个 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 问题是相同的问题。人们的建议是调整标题,但到目前为止,我所看到的解决方案的组合都没有奏效......

4

2 回答 2

3

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

于 2012-10-17T16:13:28.787 回答
1

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

他们的解决方案摘要:“删除无缓存标头或标头。”

于 2012-08-29T10:06:55.833 回答