我在使用 fputcsv 编写 csv 文件时遇到问题。它将页面html也放入csv文件中。我的代码有什么问题?
//Excel header
header("Content-Disposition: attachment; filename='"Delivery_Reports.csv'";" );
header("Content-type: application/vnd.ms-excel");
$out = fopen("php://output", 'w');
$flag = false;
// $result = mysql_query("SELECT * FROM senderids ") or die('Query failed!');
//$sel="SELECT number as MobileNumber ,snum as Sender , msg as Subject ,crdate as Date ,status FROM savemsg WHERE userID='".$_SESSION['id']."' ".$str." ORDER BY sn DESC ";
$result = mysql_query("SELECT `count`, `dnd`, `credit`, `sender_id`, `to`, `message`, `status` FROM `reports` WHERE `unq_id` = '$dlr_id'");
while(false !== ($row = mysql_fetch_assoc($result))){
if(!$flag){
$list = array(
"Total"=>"Total",
"DND"=>"DND",
"Credits"=>"Credits",
"From"=>"From",
"To"=>"To",
"Message"=>"Message",
"Status"=>"Status"
);
// display field/column names as first row
fputcsv($out, array_keys($list), ',', '"');
$flag = true;
}
// array_walk($row, 'cleanData');
fputcsv($out, array_values($row), ',', '"');
}
fclose($out);
你不能保证,从一段代码中,不会输出任何其他内容。 如果此代码段之前的代码使用输出缓冲,则可以使用 ob_end_clean 丢弃 HTML。 如果此代码段之后的代码导致了问题,您可以简单地调用 die 来阻止它运行。 但是,如果此代码段之前的代码直接将 HTML 输出到浏览器,或者输出 HTML 之后的代码绝对必须运行,那么您必须修改该代码才能解决问题。
正如 Tim 所提到的,打印、回显和输出到伪文件php://output
做完全相同的事情。
您也可以在
关闭文件之前使用关键字 continue
( fclose($f);
)。这也很好用。
您也可以在fclose($out);
后使用exit;
,这会阻止输出抓取我的html。
我知道
这是一个老问题,但它可以在谷歌中找到,所以添加这个。
如果在尝试创建文件之前由 CMS(如 WordPress 等)输出 HTML,则在输出标头之前添加ob_clean();
和ob_start();
可能会有所帮助。
例如:
function create_csv($records, $columns){
ob_clean();
ob_start();
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="Export.csv"');
$fp = fopen('php://output', 'w+');
// Generate the file content.
fclose($fp);
die();
}