作者bill42362 (酒池肉林夜夜生科)
看板PHP
标题[请益] 大到不能用 explode 处理的字串
时间Sun May 29 17:28:57 2011
我的档案大概是像这样 (其实就是纯文字版的 .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
1F:→ cceHunteR:用C的老方法fscanf() ?? 05/29 17:39
2F:→ bill42362:fscanf 好像不会比 fgets 快耶 QQ 05/29 18:09
3F:→ gconline:改php.ini或者是直接 ini_set('memory_limit', 'XXXM'); 05/29 18:28
4F:→ gconline:不过这不是治标的方法,如果只做一次就这样用 05/29 18:28
5F:→ gconline:如果这是写一套要用很久的系统的话就...换方法做吧 :D 05/29 18:29
6F:→ bill42362:的确是要用非常久的系统...另外那些资料是模拟的结果 05/29 18:30
7F:→ bill42362:所以减少资料量这方法等於是要牺牲准度所以不可行 @@" 05/29 18:31
8F:推 mrbigmouth:(用php)先将资料切成数量不等的档案存起来再一一做呢? 05/29 21:01
9F:→ mrbigmouth:其实我不懂为啥这种大量的处理为什麽要用php做啦XD 05/29 21:03
10F:推 mrbigmouth:话说set_time_limit没用吗? 05/29 21:13
11F:→ mrbigmouth:我是指超时的问题 05/29 21:13
12F:→ bill42362:我只是因为怕不知道会不会有副作用 所以不敢动设定 @@" 05/29 22:19
13F:→ MOONRAKER:用file()不就直接读成一个阵列了 -_-# 05/30 03:11
14F:推 mrbigmouth:资料大到这种程度 调整超时还是必要的 set_time_limit 05/30 08:02
15F:→ mrbigmouth:不会动到设定吧? 就只有那个程式而已 05/30 08:02
16F:→ bill42362:问题解决了 感谢各位 05/30 19:58
17F:→ bill42362:我用 substr 先切过 $buffer 的资料後就可以 explode 了 05/30 19:59
18F:→ bill42362:另外超时的问题题是做了太没效率的字串操作 05/30 20:00
19F:→ bill42362:修改了一下字串累加的方法後速度就够快到不会超时了 05/30 20:01
20F:→ mirae:先切割成小单元再处理.效能会比一个大档快很多. 06/01 01:59