[英]PHP - cannot modify header information - headers already sent by (output started at
[英]During CSV downloading - Warning: Cannot modify header information - headers already sent by (output started at
以下小演示代码已成功运行
<?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);?>
我在脚本中使用了上面的演示代码,然后它不起作用。 说->警告:无法修改标头信息-标头已经发送过(输出始于
$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");
}
任何人都可以帮助解决该问题。
将标头函数放在任何回显/输出之前:
<?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'); “ 然后从文件中加载某些格式的csv,例如。 “ $ csv”,然后仅回显内容,例如:
<?php
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename=contacts.csv');
$csv = file_get_contents('YOUR PATH');
echo $csv;
exit;
在以下情况下,您将始终收到此错误“警告:无法修改标题信息-标题已发送”
您在之前留空行
如果该调用是ajax调用,并且您在调用标头之前回显了一些字符。
只是确保之前没有字符
你可以加:
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浏览器。
你看:
和
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.