fputcsv 生成没有换行符的行
fputcsv generates line without newline
这是删除了 SQL 部分的完整代码。我希望它开始使用数据库中的数据下载 CSV 文件。但是当我 foreach csv 数组时,它意外地以几乎正确的格式打印所有数据,但忽略换行符并改为放置 ' '(space)。
$csv = array(
array('RECID', 'UID', 'Amount', 'Sumbit Date')
);
while($row = mysql_fetch_row($results)) // SQL query isn't reason 100%
{
$csv[] = array($row[0], $row[1], $row[2], $row[3]);
}
$fp = fopen('php://output', 'w');
//this part is unexpected
foreach($csv as $line){
fputcsv($fp, $line);
}
header("Cache-Control:maxage=1");
header("Pragma: public");
header("Content-Type:text\csv; charset=UTF-8" );
header('Content-Disposition: attachment; filename=csv.csv');
fpassthru($fp);
fclose($fp);
如果更改 foreach 循环并逐行调用 fputcsv 元素,则一切正常。下载开始,CSV 工作正常。
fputcsv($fp, $csv[0]);
fputcsv($fp, $csv[1]);
fputcsv($fp, $csv[2]);
但是,当您尝试使用任何循环遍历数组时,它会忽略换行符并输出没有换行符但以“ ”作为换行符分隔符的数据。它不下载它只是在浏览器中打印所有数据。
foreach($csv as $line){
fputcsv($fp, $line);
}
如何解决这个问题,使我的脚本按预期工作(添加换行符并开始下载)?
存在未知错误,当您逐行放置 fputcsv 时,在何处编写并不重要,但是,如果您在循环中执行,则循环必须在所有 headers!
之后
header("Cache-Control:maxage=1");
header("Pragma: public");
header("Content-Type:text\csv; charset=UTF-8" );
header('Content-Disposition: attachment; filename=csv.csv');
for($i = 0; $i < count($csv); $i++){
fputcsv($fp, $csv[$i]);
}
这是删除了 SQL 部分的完整代码。我希望它开始使用数据库中的数据下载 CSV 文件。但是当我 foreach csv 数组时,它意外地以几乎正确的格式打印所有数据,但忽略换行符并改为放置 ' '(space)。
$csv = array(
array('RECID', 'UID', 'Amount', 'Sumbit Date')
);
while($row = mysql_fetch_row($results)) // SQL query isn't reason 100%
{
$csv[] = array($row[0], $row[1], $row[2], $row[3]);
}
$fp = fopen('php://output', 'w');
//this part is unexpected
foreach($csv as $line){
fputcsv($fp, $line);
}
header("Cache-Control:maxage=1");
header("Pragma: public");
header("Content-Type:text\csv; charset=UTF-8" );
header('Content-Disposition: attachment; filename=csv.csv');
fpassthru($fp);
fclose($fp);
如果更改 foreach 循环并逐行调用 fputcsv 元素,则一切正常。下载开始,CSV 工作正常。
fputcsv($fp, $csv[0]);
fputcsv($fp, $csv[1]);
fputcsv($fp, $csv[2]);
但是,当您尝试使用任何循环遍历数组时,它会忽略换行符并输出没有换行符但以“ ”作为换行符分隔符的数据。它不下载它只是在浏览器中打印所有数据。
foreach($csv as $line){
fputcsv($fp, $line);
}
如何解决这个问题,使我的脚本按预期工作(添加换行符并开始下载)?
存在未知错误,当您逐行放置 fputcsv 时,在何处编写并不重要,但是,如果您在循环中执行,则循环必须在所有 headers!
之后header("Cache-Control:maxage=1");
header("Pragma: public");
header("Content-Type:text\csv; charset=UTF-8" );
header('Content-Disposition: attachment; filename=csv.csv');
for($i = 0; $i < count($csv); $i++){
fputcsv($fp, $csv[$i]);
}