我正在尝试通过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条记录,它不起作用。
我错过了一些设置吗?
答案 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");