PHP 7:查询输出到文本文件问题(FIeld 标头和跳过最后一列后的逗号)



我对PHP很陌生,并试图重新创建一些我用另一种语言编写的代码。 我正在使用的 PHP 的当前版本是 7.17。

现在,我正在尝试重新创建一个简单的函数,将MySQL查询打开为逗号消除的文本文件,其中最后一列后没有逗号(只是一个换行符(。 我现在正在尝试弄清楚两件事来完成这段代码。

如何在数据输出
  1. 的顶部插入查询列标题(现在只输出数据,而不是列标题(。

  2. 在"fwrite($output,$value.','(;"行,我试图弄清楚如何在最后一个字段之后不添加逗号(如何跳过在最后一列数据之后添加逗号(。

.PHP:

if (isset($_POST['download'])) {
header('Content-Type: text/plain');
header('Content-Disposition: attachment;filename=cars.txt');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
$output = fopen('php://output', 'w');
while ($row = getRow($result)) {
foreach ($row as $key => $value) {
fwrite($output,  $value.',');
}
fwrite($output, "rn");
}
fclose($output);
exit;
}

谢谢!

听起来你正在尝试创建一个CSV文件,所以为什么不使用PHP内置的CSV处理功能(fputcsv(,如下所示:

$output = fopen('php://output', 'w');
while ($row = getRow($result)) {
fputcsv($output, $row);
}
fclose($output);

通过这种方式,PHP为您完成了所有繁重的工作。

根据评论编辑。

您可以尝试使用此处的答案来处理值的编码,然后再转换为 CSV,然后将 HTTP 标头中的文件编码设置为header('Content-Type: text/plain; charset=utf-8');

此外,fputcsv允许您更改分隔符,外壳和转义字符,如果它们给您带来问题。

否则只需执行:

$output = fopen('php://output', 'w');
while ($row = getRow($result)) {
$line = implode(', ', $row);
fwrite($output, $line);
}
fclose($output);

最新更新