本篇文章給大家帶來了關于PHP+csv的相關知識,其中主要介紹了php百萬數據怎么通過腳本文件寫入csv的相關內容,下面一起來看看怎么實現的吧,希望對大家有幫助。

需求:
百萬數據寫入 csv。
框架:
N 多年前老框架,百度都搜不到了,所以寫法趨近原生
分析:
數據量過大,不能用瀏覽器請求寫入 csv 下載,所以寫個腳本調取
偽代碼:
//xxx - 根據自己項目替換 //調取腳本文件 exec(xxx); //腳本文件 //設置執行時間和內存 set_time_limit(0); ini_set('memory_limit', '128M'); //循環獲取 $id = 0; $data = 'xxx'.'n';//表頭 while(true){ //SQL $list = xxx WHERE id > $id ORDER BY id ASC LIMIT 10000; //每次取1w防止數據庫壓力大,根據sql來,我這個有聯表, if(empty($list)){ break; } foreach($list as $row){ $data .= '"' . $row['xxx'] . '",'; $data .= "n"; $id = $row['id'];//更新最大id } //追加寫入csv file_put_contents('xxx', mb_convert_encoding($data, 'gbk'),FILE_APPEND); unset($data);//基礎不好不確定初始化能不能清內存就先unset了 $data = '';//初始化 }
登錄后復制
本質上就是分批寫入,剛開始試驗的時候是打算不把 file_put_contents 寫在循環里的,后來發現數據量大的時候,幾十萬數據 $data 內存就超了另外如果超百萬數據的話需要做分文件導出,excel 不支持打開超過 1048576 行,理論上就是加個 $all_count 參數計當前查詢的總數,超過百萬再加新文件。
如果有更好的方法,或者代碼優化部分歡迎討論。
推薦學習:《PHP視頻教程》
站長資訊網