1

I'm using PHPExcel to generate Excel files on the fly within my PHP application. I'm using the Excel2007 format.

When a user visits the URL that creates and forces the download of the Excel file, everything works great in all browsers except for mobile Safari (iPhone and iPad).

Here are my headers and the readfile method:

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');

When I browse in mobile Safari to the URL that is supposed to download the .xlsx file I can actually see the tabs representing each worksheet of the file, but I don't see the actual data like so:

no output for phpexcel on mobile safari

Furthermore, there are two additional weird behaviors I'm encountering with this:

  • If I download this file on a desktop browser and email it to myself and open it with the Mail app in iOS, the file displays correctly.
  • If I then take that attachment from the Mail app in iOS and import into, say, Dropbox, it does NOT display properly (it displays the same as the screenshot above).
  • In Chrome, the file downloads properly and opens in Excel or even Numbers as expected, but in the console I see this message: Resource interpreted as Document but transferred with MIME type application/vnd.ms-excel:

Also, per the PHPExcel documentation, in place of readfile I have also tried:

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

That, however, produces an error in mobile Safari that reads:

OfficeImportErrorDomain Error 912

To eliminate the Content-type as being the issue I've experimented by adjusting the Content-type to other values (such as application/vnd.ms-excel or even application/download). Unfortunately (though not surprisingly) those don't work either.

Any guidance is greatly appreciate.

4

1 回答 1

0

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

于 2015-04-08T07:22:02.543 回答