【问题标题】:Export CSV file using PHP create corrupt file when try to open in MS Excel尝试在 MS Excel 中打开时使用 PHP 导出 CSV 文件创建损坏的文件
【发布时间】:2023-04-02 10:35:01
【问题描述】:

我有以下脚本,它将使用 php 将我的数据库中的数据导出到 csv 文件。一切正常,除了当我尝试在 excel 中打开文件时,我得到“文件已损坏”。当我运行此代码时,它显示错误 - “文件已损坏,无法打开。”提前致谢!

<?php

// Connection
include_once('conn.php');

$sql = "select * from info";
$qur = mysql_query($sql);

// Enable to download this file
$filename = "sampledata.csv";

header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: text/csv");

$display = fopen("php://output", 'w');

$flag = false;
while($row = mysql_fetch_assoc($qur)) {
    if(!$flag) {
      // display field/column names as first row
      fputcsv($display, array_keys($row), ",", '"');
      $flag = true;
    }
    fputcsv($display, array_values($row), ",", '"');
  }

fclose($display);
exit;
?>

【问题讨论】:

  • 尝试在记事本或其他文本编辑器中打开文件。看起来有什么问题吗?
  • 强制:mysql_ 扩展已弃用,请升级到 mysqli_ 或 PDO。
  • @JonathanKuhn:是的,它可以与记事本、openoffice 等其他文本编辑器一起使用,但不能在 MS Excel 中使用。
  • @JayBlanchard:我改成 mysqli 但在 MS Excel 中打开 csv 文件时仍然显示错误。
  • 你能发布一个示例 csv 文件吗?显示的代码没有任何明显的问题。

标签: php excel export-to-csv


【解决方案1】:

我找到了自己问题的答案。只需在调用标头下载 csv 文件之前添加ob_clean() 行即可清除输出缓冲区。这样就解决了excel不能打开csv文件的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多