【问题标题】:Download with php with headers do not work on IE8使用带有标头的 php 下载在 IE8 上不起作用
【发布时间】:2012-05-28 09:03:39
【问题描述】:

我正在尝试下载一个带有 php 标头的动态生成的 excel 文件:

$filename = "assets.xls";
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=$filename");
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');

但这在 IE8 上不起作用(但在其他一些带有 IE8 的电脑上工作???!!)。 IE8 尝试下载 export.php 文件而不是 assets.xls。知道为什么 IE8 会这样做吗?

【问题讨论】:

    标签: php header download phpexcel


    【解决方案1】:

    尝试正确格式化标题as per the HTTP spec,在;filename 之间使用空格并在文件名周围加上引号:

    header('Content-Disposition: attachment; filename="' . $filename . '"');
    

    【讨论】:

    • +1 另外,为了获得更好的体验,请考虑在可用的情况下添加Content-Length
    • 让我们试试这个,但不确定问题出在这里。在某些 IE8 机器上正在运行,而另一些则不是。
    • 也不确定是否存在问题,但按照规范显然是错误的,很可能会导致问题。
    • 我也有同样的问题。现在服务器正在运行 https。可以是浏览器设置吗?
    【解决方案2】:

    我也遇到了同样的问题。我使用以下方法来解决问题。

    header("Cache-Control: private");
    header("Content-Type: application/vnd.ms-excel");
    header("Content-disposition: attachment; filename=$filename");
    

    【讨论】:

      【解决方案3】:

      我也有类似的问题。我在 Content-Deposition 标头之前添加了以下标头。

      header("Content-type: text/csv");
      header("X-Download-Options: noopen");
      header("Content-Disposition: attachment; filename=\"ExcelFileName.csv\"");
      

      这似乎对我有用。但是,您必须先保存文件。你不能马上打开。

      【讨论】:

        【解决方案4】:

        我有完全相同的问题!刚刚通过删除“Content-Type”标头使其工作,所以我猜 IE8 不能很好地与该类型一起使用..?目前还不确定最好的选择是什么,但这绝对是适合我的播放器。

        【讨论】:

        • 刚刚通过添加对“header_remove();”的调用使其工作在开始正常的标头调用之前。
        【解决方案5】:

        试试这个:

        $filename   =   'Excel_Sheet_'.date('Ymd').".xls";
        
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-Disposition: attachment; filename=$filename");
        header("Content-Type: application/vnd.ms-excel; "); 
        header("Content-Transfer-Encoding: binary");
        header('Cache-Control: max-age=0');
        ob_clean();
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;
        

        【讨论】:

          【解决方案6】:

          在尝试解决类似问题一整个下午后,我发现该设置

          header("Cache-Control: private");

          是最好的解决方案。 我已经尝试过确保Content-LengthContent-TypeContent-Disposition 已设置并正确格式化。 问题实际上是 新的 IE8 窗口和选项卡 似乎不喜欢在第一次发生时通过 PHP 标头发送的下载。 在初次尝试后重试文件时,它工作正常(在我的情况下)。

          如上所述设置Cache-Control 后,我的所有链接在 IE8 中都可以正常工作。

          【讨论】:

          • 没人关心IE8(连IE9和IE10都被mrcf抛弃了)
          • @albanx 我的客户还在运行 Windows XP!不幸的是,仍有大量企业在其办公室中使用 XP
          • 2 年前,我在上一份工作中遇到了同样的问题。我们能够说服客户切换到新的现代浏览器,告诉他们将有更多的功能和更快的体验,也更安全。 (即使在 XP 上你也可以加载 chrome 和 firefox)
          • @albanx 是的。我希望与我打交道的每个人都那么容易被说服!将为我节省一个用于测试的 virtualbox 安装!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-03
          • 2013-04-03
          • 2015-04-11
          • 1970-01-01
          • 2011-08-20
          相关资源
          最近更新 更多