PHPExcel无法在移动版Safari中下载

时间:2012-08-22 01:36:33

标签: php mobile-safari phpexcel xlsx force-download

我正在使用PHPExcel在我的PHP应用程序中动态生成Excel文件。我正在使用Excel2007格式。

当用户访问创建并强制下载Excel文件的网址时,所有浏览器除了移动版Safari (iPhone和iPad)外,一切都很有效。

以下是我的标题和readfile方法:

header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-disposition: attachment; filename=' . $file_name . '.xlsx;');
header('Content-Length: ' . filesize($path_to_file . '.xlsx'));
readfile($path_to_file . '.xlsx');

当我在移动版Safari中浏览应该下载.xlsx文件的URL时,我实际上可以看到代表该文件的每个工作表的选项卡,但我没有看到实际数据:

no output for phpexcel on mobile safari

此外,我还遇到了另外两种奇怪的行为:

  • 如果我在桌面浏览器上下载此文件并通过电子邮件发送给自己并使用iOS中的Mail应用程序打开它,则文件会正确显示。
  • 如果我从iOS中的Mail应用程序中获取该附件并导入到Dropbox,则它无法正常显示(它显示与上面的屏幕截图相同)。
  • 在Chrome中,文件正常下载并按预期在Excel或甚至数字中打开,但在控制台中我看到以下消息:Resource interpreted as Document but transferred with MIME type application/vnd.ms-excel:

另外,根据PHPExcel文档,代替readfile我也尝试过:

$objWriter->save('php://output');

然而,这会在移动版Safari中产生一个错误:

OfficeImportErrorDomain Error 912

通过将Content-type调整为其他值(例如Content-type甚至application/vnd.ms-excel)来消除application/download作为问题的实验。不幸的是(虽然并不奇怪)那些也不起作用。

非常感谢任何指导。

1 个答案:

答案 0 :(得分:0)

我使用->addHeaderLine('Content-Type', 'application/octet-stream')。否则Safari会显示错误。 虽然这个标题使它在浏览器中显示xlsx文件,而不是下载。我还没有找到任何强制移动Safari下载的解决方案。