14

我有一个小函数,它创建 .xls 文档(使用 PHPexcel),然后将其发送到 php://output。然后用户下载它。
一切正常,除了 mac os x 上的 safari 出于某种原因添加了 .html 扩展名。
所以结果文件被命名为report.xls.html。内容还可以,但对用户来说很烦人。

我该如何解决这个问题?

这是我的代码的一部分:

$filename = 'report.xls';

header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'.$filename.'"'); 
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');

$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
$objWriter->save('php://output');
4

6 回答 6

34

我有同样的问题

通过退出解决;在脚本的末尾

$filename = 'report.xls';
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'.$filename.'"'); 
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');

$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
$objWriter->save('php://output');
exit;
于 2014-03-17T17:23:20.680 回答
1

你可以试试这个标题:

header('Content-type: application/ms-excel');

或检查 http://www.solutionoferror.com/php/phpexcel-not-downloading-in-mobile-safari-81107.asp

于 2013-10-14T15:33:46.880 回答
1

我有一个类似的问题,我用退出函数(使用参数状态)解决了它。

在模型中:

public static function xls($id)
{
    $xls = new PHPExcel();
    //Code ...
    $objWriter = new \PHPExcel_Writer_Excel5($xls);

    ob_start();
    $objWriter->save('php://output');
    $excelOutput = ob_get_clean();

    return $excelOutput;
}

在控制器中:

public function xls($id)
{
    header('Expires: Mon, 1 Apr 1974 05:00:00 GMT');
    header('Last-Modified: ' . gmdate('D,d M YH:i:s') . ' GMT');
    header('Cache-Control: no-cache, must-revalidate');
    header('Pragma: no-cache');
    header('Content-type: application/vnd.ms-excel');
    header('Content-Disposition: attachment; filename=' . $id . '.xls');

    return exit(Controller::xls($id)); // <-- 
}
于 2018-11-19T15:00:14.077 回答
0

您可以使用 javascript 代码

<script>
 window.location.href = "stackoverflow.com/file.xls";
</script>

这将打开 xls 源和文件可供下载

于 2013-10-16T06:32:21.060 回答
0

对于任何有这个问题的人来说,它是浏览器在做自己的事情。使用 JavaScript 对我有用,但您需要添加 html 而不是使用 JavaScript 输出到浏览器。

<!doctype html>
<html>
     <head> <meta charset="UTF-8"> <title>Untitled  ocument</title> </head> 
     <body> 
          <script> window.location.href = http://example/file.docx"; </script> 
     </body>
</html>
于 2015-11-12T17:18:44.303 回答
0

如果有人仍然面临上述问题

请将内容类型更改为

header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
于 2016-01-27T07:12:33.697 回答