轉載:http://blog.csdn.net/huyanping/article/details/7068356
常常碰到需要從資料庫匯出資料到Excel文件,用一些開源的類別庫,例如PHPExcel,確實比較容易實現,但對大量資料的支援很不好,很容易到達PHP記憶體使用上限。這裡的方法是利用fputcsv寫CSV檔案的方法,直接向瀏覽器輸出Excel檔案。
// 輸出Excel檔案頭,可把user.csv換成你要的檔案名稱
header('Content-Type: application/vnd.ms-file'); ="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); 〟〟〜〟〜/ 〜〜 〟〜〟〜〟〟〜〟〟〜/ 〟〜 〜〟〜); / 每隔$limit行,刷新一下輸出buffer,不要太大,也不要太小
$limit = 100000;
// 逐行取出數據,不浪費內存
while ($row = $stmt->Dfetch(Zend_end_D ::FETCH_NUM)) {
$cnt ++;
if ($limit == $cnt) { //刷新一下輸出buffer,防止由於資料過多造成問題
ob_flush();$
〦〜(); = 0;
}
foreach ($row as $i => $v) {
$row[$i] = iconv('utf-8', 'gbk', $v);
, $row);
}
以上就介紹了PHP匯出CSV文件,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。