开发中经常会碰到导出MySQL数据到Excel文件的需求。一些开源的类库,如PHPExcel,确实比较容易实现,但由于对大量数据的兼容很不好,很容易到达PHP内存使用上限。
小编整理了一下fputcsv写CSV文件的方式,具体实现代码如下://声明文件头,文件名news.csv,需自行修改
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="http://www.482223.com/news.csv"');
header('Cache-Control: max-age=0');
//打开文件句柄,并输出至浏览器
$fp = fopen('php://output', 'a');
//定义并输出Excel列名
$t = array('编号', '标题');
foreach ($t as $_k => $_v) {
//转码,CSV的Excel支持GBK编码
$t[$_k] = iconv('utf-8', 'gbk', $_v);
}
fputcsv($fp, $t);
//操作数据库,读取数据
$condition = '1';
$result = $db->query("SELECT * FROM e_article WHERE {$condition}");
//初始化计数器
$i = 0;
//定义刷新输出缓冲频率行数
$limit = 100000;
while($r = $db->fetch_array($result)) {
$i++;
if($i < $limit){
//刷新输出buffer
ob_flush();
flush();
$i = 0;
}
//转码
foreach ($r as $k => $v) {
$r[$k] = iconv('utf-8', 'gbk', $v);
}
fputcsv($fp, $r);
}
$db->free_result($result);