在php中,可以使用了伺服器的快取來實現百萬級資料快速匯出CSV,今天就帶大家學習快速匯出csv的方式,有需要的可以參考參考。
php實作百萬資料匯出這裡使用了伺服器的快取來實作
實作:
一:建立測試表,並加入測試資料
1:建立測試表
這裡我建了一個test表,欄位分別為:id,name,age,email
2:加入測試資料
(1)先手動新增若干行資料
然後執行如下指令批次新增資料
INSERT INTO test (name,age,email) SELECT name,age,email FROM test;
多次執行上面的指令測試資料會呈指數增加,這樣就可以得到很多測試資料
二:php實作匯出百萬級資料(這裡我的查詢指令使用的時Yii框架自帶的查詢指令)
//让程序一直运行 set_time_limit(0); //设置程序运行内存 ini_set('memory_limit', '128M'); //导出文件名 $fileName = '测试导出数据'; header('Content-Encoding: UTF-8'); header("Content-type:application/vnd.ms-excel;charset=UTF-8"); header('Content-Disposition: attachment;filename="' . $fileName . '.csv"'); //打开php标准输出流 $fp = fopen('php://output', 'a'); //添加BOM头,以UTF8编码导出CSV文件,如果文件头未添加BOM头,打开会出现乱码。 fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF)); //添加导出标题 fputcsv($fp, ['姓名', '岁数', '邮箱']); $nums = 10000; //每次导出数量 $count = Test::find()->count(); $step = ceil($count/$nums);//循环次数 for($i = 0; $i < $step; $i++) { $result = Test::find() ->select(['name', 'age', 'email']) ->limit($nums) ->offset($i * $nums) ->asArray() ->all(); foreach ($result as $item) { fputcsv($fp, $item); } //每1万条数据就刷新缓冲区 ob_flush(); flush(); } exit;
如上測試後可以發現導出一百萬左右資料只需十幾秒左右時間,效率還算是不錯的
以上是php如何實現百萬級資料快速匯出CSV的詳細內容。更多資訊請關注PHP中文網其他相關文章!