バックエンド管理システムは常に数百万のデータをエクスポートします。Excel では 65536 しかサポートされず、2007 と 2010 では 1048576 しかサポートされないため、CSV は制限なくニーズを満たします。 , 一度に大量のデータを処理してエクスポートすると、メモリ オーバーフローが直接発生し、スクリプトが動作しなくなるため、分割モードでエクスポートする方が有益です。
<?php error_reporting(0); header ( "Content-type:application/vnd.ms-excel" ); header ( "Content-Disposition:filename=" . iconv ( "UTF-8", "GBK", "topic" ) . ".csv" ); //连接数据库 $link = mysql_connect('localhost','root','root') or die('连接错误'); //选择数据库 mysql_select_db("bbs",$link); //设置字符集 mysql_query("set names utf8"); //查询函数 function get_res($sql,$link){ $res = mysql_query($sql,$link); if(!$res){ die("操作失败".mysql_error()); } $arr=array(); while ($row = mysql_fetch_assoc($res)) { $arr[]=$row; } return $arr; } //查询记录总数 function getTotalCount(){ $result = mysql_query("SELECT count(*) as count FROM medsci_edu_public_medsciedu_topic", $link); return $result['count']; } // 打开PHP文件句柄,php://output 表示直接输出到浏览器 $fp = fopen('php://output', 'a'); //表头 $column_name = array('topic_id','cat_id','user_id','is_best','is_top','topic_title','topic_content','topic_img','hits','total_reply_count','created_time','last_updated_time','topic_status','last_reply_name'); // 将中文标题转换编码,否则乱码 foreach ($column_name as $i => $v) { $column_name[$i] = iconv('utf-8', 'gbk', $v); } // 将标题名称通过fputcsv写到文件句柄 fputcsv($fp, $column_name); $pagecount = 10000;//一次读取多少条 $totalcount = getTotalCount();//总记录数 $sql = "select * from medsci_edu_public_medsciedu_topic"; for ($i=0;$i<intval($totalcount/$pagecount)+1;$i++){ $data = get_res($sql." limit ".strval($i*$pagecount).",{$pagecount}",$link); foreach ( $data as $item ) { $rows = array(); foreach ( $item as $v){ $rows[] = iconv('utf-8', 'GBK', $v); } fputcsv($fp, $rows); } // 将已经写到csv中的数据存储变量销毁,释放内存占用 unset($data); //刷新缓冲区 ob_flush(); flush(); } exit;
著作権表示: この記事はブロガーによるオリジナル記事であり、ブロガーの許可なく複製することはできません。