看板 PHP 關於我們 聯絡資訊
我的檔案大概是像這樣 (其實就是純文字版的 .xls) Time P_MEM X Y Z DEST_ID 0.000000 -88.654973 0 0 0 0 0.000000 -88.654973 1 0 0 1 0.000000 -88.654973 2 0 0 2 0.000000 -88.654973 3 0 0 3 但由於檔案極大 本來想用一行一行 fgets 處理的方法會跑到超時 (60s) 於是只好用 $buffer = file_get_contents("$filename"); 的方法去讀 瞬間就成功讀取到也能 echo 出來 接著想要一行一行處理時 用 $buffer = explode("\n", $buffer); 他卻會說記憶體空間不夠他 explode: Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 1048576 bytes) 請問有沒有 function 是可以讓 $buffer 一行一行吐出來到另一個字串處理的? (處理過的字串則從 $buffer 前面去掉) 感謝大大幫忙!! -- 想你的時候 不一定能告訴你 如果不告訴你 也能會意 那我們就是有 真正的默契 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.48.199
cceHunteR:用C的老方法fscanf() ?? 05/29 17:39
bill42362:fscanf 好像不會比 fgets 快耶 QQ 05/29 18:09
gconline:改php.ini或者是直接 ini_set('memory_limit', 'XXXM'); 05/29 18:28
gconline:不過這不是治標的方法,如果只做一次就這樣用 05/29 18:28
gconline:如果這是寫一套要用很久的系統的話就...換方法做吧 :D 05/29 18:29
bill42362:的確是要用非常久的系統...另外那些資料是模擬的結果 05/29 18:30
bill42362:所以減少資料量這方法等於是要犧牲準度所以不可行 @@" 05/29 18:31
mrbigmouth:(用php)先將資料切成數量不等的檔案存起來再一一做呢? 05/29 21:01
mrbigmouth:其實我不懂為啥這種大量的處理為什麼要用php做啦XD 05/29 21:03
mrbigmouth:話說set_time_limit沒用嗎? 05/29 21:13
mrbigmouth:我是指超時的問題 05/29 21:13
bill42362:我只是因為怕不知道會不會有副作用 所以不敢動設定 @@" 05/29 22:19
MOONRAKER:用file()不就直接讀成一個陣列了 -_-# 05/30 03:11
mrbigmouth:資料大到這種程度 調整超時還是必要的 set_time_limit 05/30 08:02
mrbigmouth:不會動到設定吧? 就只有那個程式而已 05/30 08:02
bill42362:問題解決了 感謝各位 05/30 19:58
bill42362:我用 substr 先切過 $buffer 的資料後就可以 explode 了 05/30 19:59
bill42362:另外超時的問題題是做了太沒效率的字串操作 05/30 20:00
bill42362:修改了一下字串累加的方法後速度就夠快到不會超時了 05/30 20:01
mirae:先切割成小單元再處理.效能會比一個大檔快很多. 06/01 01:59