CSV下载期间 - 警告:无法修改标头信息 - 已经发送的标头(输出从

时间:2015-11-02 17:32:58

标签: php csv file-handling

以下小型演示代码正在成功运行

<?php
$list = array
(
"ID,Name,Preview,Payout",
"Peter,Griffin,Oslo,Norway",
"Glenn,Quagmire,Oslo,Norway",
);
$today_doc=date("Y-m-d").".csv";
$file = fopen($today_doc,"w");

foreach ($list as $line)
  {
  fputcsv($file,explode(',',$line));
  }
  fclose($file); 
// We'll be outputting a csv
header('Content-type: text/csv');
// It will be called contacts.csv
header('Content-Disposition: attachment; filename="'.$today_doc.'"');
// The PDF source is in original.csv
readfile($today_doc);?>

我将上面的演示代码用于我的脚本然后它无法正常工作。 Saying-&GT; 警告:无法修改标题信息 - 已经发送的标题(输出从

开始)
    $selected_ids=$_POST['selected_id'];
    $xyz="";
    $list = array
    ("ID,Offer Name,Emp,salary");
    $i=0;
    foreach($selected_ids as $id)
        {
            $xyz.=$id.',';
        }
        $xyz=trim($xyz,',');
    $extract=mysqli_query($con,"SELECT * FROM `emp_record` WHERE id in ($xyz)") or die(mysqli_error($con));
    while($row = mysqli_fetch_array($extract))
    {
        $i++;
        $list[$i]=$row["id"].','.$row["name"].','.$row["emp"].','.$row["salary"];
    }
$today_doc=date("Y-m-d").".csv";
$today_doc="contacts.csv";
$file = fopen($today_doc,"w");
foreach ($list as $line)
  {
  fputcsv($file,explode(',',$line));
  }
  fclose($file);
  //  We'll be outputting a csv
 header('Content-type: text/csv');
// It will be called contacts.csv
header('Content-Disposition: attachment; filename=contacts.csv');
//The PDF source is in original.csv
readfile("contacts.csv");
}

任何人都可以帮忙解决问题。

3 个答案:

答案 0 :(得分:0)

在任何回声/输出之前放置标题函数:

<?php
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename=contacts.csv');

编辑:

哦,这不是你的问题,但如果你想要这样你应该回应这个标题“header('Content-type:text / csv'); header('Content-Disposition:attachment; filename = contacts.csv “);”然后在某些var例如中从文件加载csv。 “$ csv”,然后只是回显内容,如:

<?php
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename=contacts.csv');
$csv = file_get_contents('YOUR  PATH');
echo $csv;
exit;

答案 1 :(得分:0)

您将始终收到此错误&#34;警告:无法修改标头信息 - 已发送的标头&#34;什么时候

  1. 之前留下一个空行
  2. 如果调用是ajax调用,并且在调用标题之前回显了一些字符。

  3. 请确保之前没有人物

答案 2 :(得分:0)

您可以添加:

开始时

ob_start()

最后

ob_flush()

示例:

<?php ob_start(); ?>
<?php
    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=export.csv');
     .......
     ob_flush();
?>

注意

如果需要,您可以使用:

ob_start("ob_gzhandler")

ob_gzhandler()旨在用作ob_start()的回调函数,以帮助将gz编码数据发送到支持压缩网页的Web浏览器。

你看:

PHP net ob_start

PHP net ob_gzhandler