【问题标题】:PHPExcel output to browser doesn't work in IEPHPExcel 输出到浏览器在 IE 中不起作用
【发布时间】:2012-08-29 09:36:10
【问题描述】:

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

【问题讨论】:

  • 也许这个答案可以帮助你stackoverflow.com/a/6065779/1503552
  • 尝试在content-Disposition标头中的attachment之后添加一个空格。
  • 添加空格没有任何效果。关闭 SSL 解决了这个问题,所以它肯定与这个链接的问题有关:但是,该查询的解决方案也没有为我解决它(我需要保持 SSL 开启)。

标签: php internet-explorer phpexcel


【解决方案1】:

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

【讨论】:

  • 这就是我最终做的事情,最后:它需要与 IT 协商以提高输出文件夹的一些权限,但最终一切都解决了!
【解决方案2】:

这一切都归结为 IE 对您设置的标题的处理。 Microsoft's own answer 这个已知问题应该会为您解决问题。

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

【讨论】:

  • 如果我删除所有标题,它可以工作,但 IE 只是尝试在浏览器窗口中打开二进制文件。一旦我包含Content Type,同样的问题:P
  • 那么只有内容类型的单个标题会导致这个问题?这对我来说听起来很可疑,更像是一个损坏的浏览器
  • 我不会把它通过 IT 部门!最后,我放弃了与它的搏斗,退出了 SSL。不是一个理想的解决方案,但需要做一些事情:P
猜你喜欢
  • 2014-12-09
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 2013-01-21
  • 2017-01-07
  • 2011-04-30
  • 2015-05-20
  • 1970-01-01
相关资源
最近更新 更多