
这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件。
复制代码
代码如下:
//
输出Excel文件头,可把usercsv换成你要的文件名
header('Content-Type:
application/vndms-excel');
header('Content-Disposition:
attachment;filename="usercsv"');
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从数据库分多次读取100万行记录,和分多次将100万行写入文本文件都没问题
Excel可以支持100万行记录,Excel 2003最大支持65536行,从2007版开始支持104万行了,目前2007的盗版应该比较普及了-_-! 问清楚你的客户是什么版本。
你要导出excel的理由是非常充分和正确的,应该继续坚持。业务人员最熟悉的就是Excel,实在不熟悉现学现用也比别的快。只是要注意,当数据量达到10万行这个级别时,Excel的公式填充将会非常非常慢,如果再有LOOKUP()公式,基本上十分钟内处理CPU满载进程管理器杀不掉的状态,这时候其实xampp + phpmyadmin是一个易用性和性能都最平衡的选择
PHPExcel输出的是Excel XML格式,有个XML头和尾,中间是数据Body,需要将100万行都赋值给一个数组才可以调用PHPExcel->write(),这容易导致PHP执行超时或者内存超限,你不妨调整一下phpini配置,把超时时间和内存限制都改到很大
如果是输出csv格式,那就太简单了,你的问题可能是没给字段内容加引号,加上引号再调用fputcsv试试?其实fputcsv做的事情特别简单,你甚至可以不管它,自己把CSV文件的每一行拼接好了之后用file_put_contents写入 希望能帮到你,我还要抓紧时间自己在后盾人自己学习呢,一起加油吧(「・ω・)「嘿
$fp = fopen('php://output', 'a');
// 输出Excel列名信息
$head = array("电子邮件");
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;
// 逐行取出数据,不浪费内存
$count = count($email);
for($t=0;$t<$count;$t++) {
$cnt ++;
if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题
ob_flush();
flush();
$cnt = 0;
}
$row[] = $email[$t];
foreach ($row as $i => $v) {
$row[$i] = iconv('utf-8', 'gbk', $v);
}
fputcsv($fp, $row);
unset($row);
}
以上就是关于PHP导出MySQL数据到Excel文件(fputcsv)全部的内容,包括:PHP导出MySQL数据到Excel文件(fputcsv)、怎么将php数据导出excel、php怎么导出大量数据的Excel等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)