【问题标题】:PHP printing to browser instead of CSV filePHP打印到浏览器而不是CSV文件
【发布时间】:2017-08-07 19:24:05
【问题描述】:

尝试使用从我们的数据库中导出的内容创建 csv 文件。这是我使用的代码:

if(isset($_POST["Export"])){

  header('Content-Type: text/csv; charset=utf-8');  
  header('Content-Disposition: attachment; filename=data.csv');  
  $output = fopen("php://output", "w");  
  fputcsv($output, array('ID', 'Name', 'Email', 'Phone'));  
  $query = "SELECT userID, name, email, phone from user ORDER BY userID DESC";  
  $result = mysql_query($query);  
  while($row = mysql_fetch_assoc($result))  
  {  
       fputcsv($output, $row);  
  }  
  fclose($output);  

当我单击导出按钮时,它会在浏览器中加载此 PHP 页面并显示正确的结果。但是我无法将结果存储在文件中。任何帮助将不胜感激。

【问题讨论】:

  • 这些标题正是我创建 CSV 下载的方式(虽然没有 utf-8,但这应该不是问题)。可能的问题:首先验证标头已发送到浏览器(F12 然后网络选项卡),在设置标头之前可能的(不需要的)输出会破坏它们(也会在您的 error_log 中引发警告)。第二:尝试引用文件名filename="data.csv",以确保,第三:尝试另一个浏览器以验证这不是浏览器错误(你的不会是第一个)
  • 嘿@PetervanderWal,感谢您的回复。 1. 我在预览中看到所有数据库数据的正确标题。 2. 尝试引用文件名,但不幸的是,什么也没有。 3. 在 Chrome 和 Firefox 中尝试过

标签: php export-to-csv fputcsv


【解决方案1】:

尝试在文件输出之前发送header("Content-Type: application/force-download");

【讨论】:

    【解决方案2】:

    尝试使用以下内容类型之一:

    header('Content-Type: application/vnd.ms-excel');
    header('Content-Type: application/octet-stream');
    

    【讨论】:

    • 现在它只是打开一个空白的 PHP 页面(之前有正确的输出)。这可能是权限问题吗?
    • 这将在服务器端存储文件。当我正确阅读问题时,Matture 正在尝试创建一个“下载 CSV”链接。
    • 没错@PetervanderWal。我要下载文件客户端。
    • @matture 我误解了你的问题。您想触发输出的文件下载,而不仅仅是将原始文本输出到浏览器。更新了我的答案。
    【解决方案3】:

    您所要做的就是删除 Content-Disposition 标头并将 Content-Type 标头设置为纯文本:

    header('Content-Type: text; charset=utf-8');

    【讨论】:

      【解决方案4】:

      确保您的脚本中没有任何其他 printecho 命令。

      【讨论】:

        【解决方案5】:

        尝试删除fclose($output); 行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-17
          • 1970-01-01
          • 2012-01-03
          • 1970-01-01
          • 2012-06-16
          • 1970-01-01
          • 2015-03-09
          • 1970-01-01
          相关资源
          最近更新 更多