PHP导出MySQL数据到Excel文件(fputcsv)
前端之家收集整理的这篇文章主要介绍了
PHP导出MySQL数据到Excel文件(fputcsv),
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件。
<div class="codetitle"><a style="CURSOR: pointer" data="28120" class="copybut" id="copybut28120" onclick="doCopy('code28120')"> 代码如下:
<div class="codebody" id="code28120">
//
输出Excel
文件头,可把user.csv换成你要的
文件名
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="user.csv"');
header('Cache-Control: max-age=0'); // 从
数据库中
获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可
$
sql = 'select * from tbl where ……';
$stmt = $db->query($
sql); // 打开
PHP文件句柄,
PHP://output 表示直接
输出到浏览器
$fp = fopen('
PHP://output','a'); //
输出Excel列名信息
$head = array('姓名','性别','年龄','Email','电话','……');
foreach ($head as $i => $v) {
// CSV的Excel
支持GBK编码,一定要转换,否则乱码
$head[$i] = iconv('utf-8','gbk',$v);
} // 将数据通过fputcsv写到
文件句柄
fputcsv($fp,$head); // 计数器
$cnt = 0;
// 每隔$limit行,刷新一下
输出buffer,不要太大,也不要太小
$limit = 100000; // 逐行取出数据,不浪费内存
while ($row = $stmt->fetch(Zend_Db::FETCH_NUM)) { $cnt ++;
if ($limit == $cnt) { //刷新一下
输出buffer,防止由于数据过多造成问题
ob_flush();
flush();
$cnt = 0;
} foreach ($row as $i => $v) {
$row[$i] = iconv('utf-8',$v);
}
fputcsv($fp,$row);
}