[請益] php取DB(XX萬筆)到excel

看板PHP作者 (亂入)時間10年前 (2013/11/26 23:23), 編輯推噓8(8012)
留言20則, 8人參與, 最新討論串1/2 (看更多)
大家好 最近遇到這個問題 我之前是使用phpexcel寫的 然後是在demo做測試用 那時候沒考慮到筆數問題 結果移植到實體上面就爆炸了 原因想當然爾是memory不足 我已經爬過關於phpexcel&php memory的問題 公司只願意開128MB給一個user 似乎是很難解 請問各位有解嗎(環境為php5.2.x 非5.3) 試過pear但是會有utf8問題 其他的套件就很難找了 能google的八成都是phpexcel 用了他一個本身的cache_to_sqlite memory使用變成1/4 但是只寫到3xmb還是死當跳出空白(那就跟原本120m差不多) 放寬條件的話頂多記憶體開開看512G 但是要寫入最少25w筆資料(現在才五萬多筆) 又如果無解 該如何告知公司上層比較好 我已經跟他們說過蠻多次關於memory的問題 但是由於我是剛入公司也是社會新鮮人 他們好像覺得這個都很容易解決 然後拿C&C++的概念跟我說應該很好處理 (公司寫php的都沒用過php寫大量資料 都只是用來做網頁呈現 最大的幾個上司是底層的) 邏輯我很早就寫好了 最近就被這搞了四五天 快發瘋了 -- 喜歡花的人,   ╱ 愛花的人, 會把花摘走。 ╱ 會幫花澆水。 ∴∵∴∵ φkcetair ■╯ *** * ∴∵∴∕□ ˇˇˇˇˇˇ ˇˇ ╯﹨ ˇ ˇˇˇ ˇ ˇ ˇˇ ˇˇ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.117.82

11/27 00:12, , 1F
一行一行吐csv?
11/27 00:12, 1F

11/27 00:18, , 2F
是吐出CSV檔? 不能分割成多檔嗎? 說真的25w筆在同一個
11/27 00:18, 2F

11/27 00:18, , 3F
sheet 你電腦要打開 也要讀一陣子吧
11/27 00:18, 3F

11/27 00:25, , 4F
看這邊應該是吐xls 不過用C寫也會用掉超過128M記憶體吧
11/27 00:25, 4F

11/27 00:29, , 5F
2003 xls上限不是65536嗎? 2007 xlsx才有辦法同sheet吧?
11/27 00:29, 5F

11/27 00:34, , 6F
是xls or xlsx N worksheet 每個sheet col皆不同
11/27 00:34, 6F

11/27 00:44, , 7F
總之PHPExcel記憶體就是吃很兇
11/27 00:44, 7F

11/27 00:44, , 8F
PEAR的Spreadsheet_Excel_Writer才有辦法
11/27 00:44, 8F

11/27 00:44, , 9F
至於UTF-8問題 找一下就有解了
11/27 00:44, 9F

11/27 05:19, , 10F
如果你不是應徵設計網站的,可以離開了
11/27 05:19, 10F

11/27 05:25, , 11F
不過環境也該升上去了吧,現在都5.4 5.5了
11/27 05:25, 11F

11/27 05:29, , 12F
純匯出可以用C or C#輸出好檔案 在伺服端的目錄
11/27 05:29, 12F

11/27 05:30, , 13F
php則是排程匯出指令跟控管檔案的輸出
11/27 05:30, 13F

11/27 05:31, , 14F
php本身設計不適合 這種需要長時間值行的工作
11/27 05:31, 14F

11/27 05:34, , 15F
忘記說,不見得需要C之類的,Python做做看也行
11/27 05:34, 15F

11/30 09:41, , 16F
set_time_limit ?
11/30 09:41, 16F

12/01 14:13, , 17F
用jQuery+PHP一次送500筆試試,還可看到即時回應
12/01 14:13, 17F

12/02 02:30, , 18F
先count筆數,再設個一次取的最大值,取資料用offset
12/02 02:30, 18F

12/02 02:31, , 19F
來取一個range,以上再用while迴圈去跑,取出的model每次
12/02 02:31, 19F

12/02 02:31, , 20F
結束再unset掉,一直加回同一個變數裏去render你的row
12/02 02:31, 20F
文章代碼(AID): #1IbBpVys (PHP)
文章代碼(AID): #1IbBpVys (PHP)