标头已经发送,导出csv,无法下载文件

时间:2015-04-10 08:38:08

标签: php csv header

我正在编写一个基于数据库信息下载csv文件的基本脚本, 在我的仪表板/ index.php中,我使用GET并切换到包含页面 所以当我点击链接dashboard.php?link = export.php 我有一个包含所有数据的表,我有一个链接,我可以下载我的csv文件,我的问题是,当我点击export.csv,我有一个文本输出而不是下载文件,所以我把这些代码:

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename={$filename}.csv");
header("Pragma: no-cache");
header("Expires: 0");

但我总是以文本格式看到内容并出现错误

Warning: Cannot modify header information - headers already sent by (output started at /home/*/public_html/dev/dashboard/index.php:78) in /home/*/public_html/dev/dashboard/component/export.php on line 39

所以我问我怎样才能解决这个问题,我可以在export.php中删除索引的标题并设置一个新的也可以下载文件或者extacly 也许我需要在export.php中更改Content-Type为text / csv 但是alrady发送了text / html。 请帮忙解决这个问题 谢谢

2 个答案:

答案 0 :(得分:3)

正如您所看到的,index.php文件中已经发送了一些内容(打印),其中包含您的export.php文件。

确保您没有在标题之前打印任何内容。在某些情况下,可能是开放<?php标记之间的空格或类似的标记。顺便说一下,转换你所拥有的包含案例。

其他方法是尝试在export.php

中的语句之前使用header_remove();

答案 1 :(得分:0)

在我的情况下,我没有在标题之前添加任何内容我从数据库获取记录。 如果您有下载csv的功能,请在函数顶部添加以下标题,如:

function exportCsv($date) {
            header('Content-Type: text/csv; charset=utf-8');
            header('Content-Disposition: attachment; filename=data.csv');
.
.
.
.
}