PHP导出MySQL数据到Excel文件(fputcsv)

2015-01-24信息快讯网

经常会碰到需要从数据库中导出数据到Excel文件,用一些开源的类库,比如PHPExcel,确实比较容易实现,但对大量数据的支持很不好,很容易到达PHP内存使用上限。

这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件。
 
// 输出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', 'gbk', $v); 
} 
fputcsv($fp, $row); 
} 

优点简单易用,非常节省内存,不依赖第三方类库。
php判断上传的Excel文件中是否有图片及PHPExcel库认识
PHP跨时区(UTC时间)应用解决方案
将博客园(cnblogs.com)数据导入到wordpress的代码
PHPEXCEL 使用小记
Could not load type System.ServiceModel.Activation.HttpModule解决办法
PHP数组无限分级数据的层级化处理代码
php获取通过http协议post提交过来xml数据及解析xml
phpexcel导出excel的颜色和网页中的颜色显示不一致
zend framework配置操作数据库实例分析
用Simple Excel导出xls实现方法
php excel reader读取excel内容存入数据库实现代码
PHP正确解析UTF-8字符串技巧应用
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
Zend的AutoLoad机制介绍
说说PHP的autoLoad自动加载机制
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
Linux fgetcsv取得的数组元素为空字符串的解决方法
如何在symfony中导出为CSV文件中的数据
PHP array_multisort()函数的使用札记
PHP include_path设置技巧分享
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
PHP 数据结构 算法 三元组 Triplet
php中批量删除Mysql中相同前缀的数据表的代码
php编程实现获取excel文档内容的代码实例
php懒人函数 自动添加数据
php设计模式 DAO(数据访问对象模式)
php设计模式 Delegation(委托模式)
使用php shell命令合并图片的代码
PHP字符编码问题之GB2312 VS UTF-8解决方法
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
fleaphp rolesNameField bug解决方法
fleaphp crud操作之findByField函数的使用方法
zend api扩展的php对象的autoload工具
在MongoDB中模拟Auto Increment的php代码
PHP 导出数据到淘宝助手CSV的方法分享
©2014-2024 dbsqp.com