PHP csv大量データエクスポート分割処理

WBOY
リリース: 2016-06-23 13:29:57
オリジナル
2301 人が閲覧しました

バックエンド管理システムは常に数百万のデータをエクスポートします。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;
ログイン後にコピー
result test:

著作権表示: この記事はブロガーによるオリジナル記事であり、ブロガーの許可なく複製することはできません。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート