fputcsv将结果打印到屏幕而不是csv

时间:2013-08-10 11:28:39

标签: php fputcsv

我正在尝试通过php将数据库数据导出到.csv。在一定长度的数据之后,它不会将查询保存到.csv文件中,而是将其显示在屏幕上。它看起来与查询哪些记录无关,而且它似乎也独立于任何特殊字符。

$handle = fopen("php://output", "w");
fputcsv($handle, array('Name','Text','Link','Category','Price','Package', 'Date of upload','Date of verification','Date of expiry','Status','Clk'));
for ($c=0; $c<$num_rows; $c++)
{
    $row2[$c][0] = iconv("UTF-8","WINDOWS-1257",html_entity_decode( $row2[$c][0] ,ENT_COMPAT,'utf-8'));
    $row2[$c][1] = iconv("UTF-8","WINDOWS-1257",html_entity_decode( $row2[$c][1] ,ENT_COMPAT,'utf-8'));
    fputcsv($handle, array($row2[$c][0], $row2[$c][1], $row2[$c][2], $row2[$c][3], $row2[$c][4], $row2[$c][5], $row2[$c][6], $row2[$c][7], $row2[$c][8], $row2[$c][9], $row2[$c][10]));
}
fclose($handle);

header('Content-Type: text/csv; utf-8');
header("Content-Disposition: attachment; filename=".$filename);
header("Pragma: no-cache");
header("Expires: 0");
11列,18条记录。有19条记录,它不起作用。

我错过了一些设置吗?

3 个答案:

答案 0 :(得分:3)

将标题放在输出之前!


如果您将转换为,请使用:

iconv("WINDOWS-1257", "UTF-8", ...

参数的顺序错误

答案 1 :(得分:2)

除了@ hex2mgl'在fopen()之前设置标题的好答案之外,您可以使用输出缓冲来防止fputcsv直接打印到屏幕而不是打印到句柄中:

ob_start();
$out = fopen('php://output', 'w');
$csv = ob_get_clean();
fclose($out);

更新

刚刚发现新的PHP i / o php://temp做得更好,不需要输出缓冲。首先使用内存(最多5mb或您指定的任何内容),然后在需要时切换到磁盘:

$fiveMBs = 5 * 1024 * 1024;
$stream = fopen("php://temp/maxmemory:$fiveMBs", 'r+');

答案 2 :(得分:1)

下面:

$handle = fopen("php://output", "w");

您正在获取标准输出的句柄(这是一种文件)。

猜猜你的意思是:

$handle = fopen($filename, "w");