php - 我的 csv 导出显示 html,如何摆脱?

标签 php mysql csv export-to-csv

我以前见过这个问题,但在尝试了多种解决方案后,我无法让它正常工作。问题是我无法将数据正确导出为 csv 格式。在我添加我的 ob_end_clean 之前,它会导出到带有 html 的 csv,现在它没有给我一个 csv,只有文本。

这是我在所需文件中的代码。

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

$list = array (
    array('aaa', 'bbb', 'ccc', 'dddd'),
    array('123', '456', '789'),
    array('"aaa"', '"bbb"')
);

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

    foreach ($list as $row) {
        ob_end_clean();
        fputcsv($fp, $row);
    }

    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=data.csv');

}

现在,当我进行导出时,数据会像 var_dump() 一样放回到屏幕上。我只是想让它转到一个 csv 文件,而不用 html 覆盖它。

最佳答案

成功了!

我在页面上的任何内容之前调用了我的 csv 代码。 :) 然后我连接到我的表,然后为我的代码做我的逻辑。我的主文件上没有 ob_start 或 ob_flush,这有很大的不同。我在 while 循环之前有 ob_clean,然后在声明 header 之后执行了 exit()。希望这能很好地解释它。

这是我的代码。

if (isset($_POST["hidden"])) {
    $sql = "SELECT * FROM `newsletter`";
    $result = mysql_query($sql);

    ob_end_clean();

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

    while ($list = mysql_fetch_assoc($result)) {
        fputcsv($fp, $list);
    }

    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=data.csv');

    exit();
}

关于php - 我的 csv 导出显示 html,如何摆脱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13316293/

相关文章:

mysql - 是什么让这个查询如此缓慢? (MySQL 5.6.36)

mysql - mysql中如何将现有行的列的值加1

java - 使用拆分函数拆分字符串时删除回车

php - 将 userid 字段添加到 zend db logger

php - 如何修复 magento 中的长 url 以进行分层导航。搜索引擎优化实践

php - 在 foreach 循环参数中分解数组

python - 如何使用openurl和multiprocessing同时获取URL不同的数据?

php - 通过 API 向 slack 发送消息时,Curl 和 PHP 未正确传递新行

php - 友好网址中的西里尔字符问题

PHP 文件 - 导出 xls 而不是 csv