4

我正在尝试通过 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 条记录,它不起作用。

我错过了一些设置吗?

4

3 回答 3

3

将标题放在输出之前!


如果您转换utf 使用:

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

参数顺序错误

于 2013-08-10T11:31:15.297 回答
2

除了@hex2mgl 'set headers before fopen()' 的最佳答案之外,您可以使用输出缓冲来防止fputcsv直接打印到屏幕而不是句柄:

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

更新:

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

$fiveMBs = 5 * 1024 * 1024;
$stream = fopen("php://temp/maxmemory:$fiveMBs", 'r+');
于 2014-12-05T00:19:35.003 回答
1

这里:

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

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

猜你的意思是:

$handle = fopen($filename, "w");
于 2013-08-10T11:30:49.843 回答