我有这样一些文件,内容类似这样
[00:00:18][122.11.56.52][bbs] 联想电脑hei
[00:00:18][61.149.193.103][bbs] 17
[00:00:18][122.11.56.52][bbs] 联想电脑hei
[00:00:18][122.11.56.52][product] 联想电脑hei
[00:00:19][122.11.56.52][product] 联想电脑hei
现在要做的是计算关键词出现的次数,以上边的为例:bbs下的关键词 联想电脑hei 出现了两次,product下的关键词 联想电脑hei 也出现了两次,bbs下的关键词 17 出现了一次,就是类似这样的计算现在的问题是如果读取一个3M左右的文件是没有问题,读再大一点的文件就会出这样错误:
Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 524288 bytes) in...
查询资料,解决办法是把memory_limit设置的大一点,确实解决了问题但我现在想问的是除了这种方法之外还有没有其他的办法?那种办法毕竟有点消耗内存
求解当中

解决方案 »

  1.   

    操作文件.的确有方法...你去网上搜下 php 操作大文件 主要的是,不能一次性读取全部文件.
      

  2.   

    我就是用的fgets来循环读取每行,为了需要,我每读取一行就把结果放入数组当中,方便最后记录关键词出现的次数,但数组里的数据太多就会出现问题了
      

  3.   

    读取后直接统计
    while($buf = fgets($fp)) {
      preg_replace("/\[(\w+)\] (.+)/e", '$cnt["$1"]["$2"]++', trim($buf));
    }当然,如果分类太多,还是会造成内存溢出的。这就要借助数据库了