我要分析一个6G的log文件,比对每行文件是否符合我的要求,程序如下$file_path = 'd:\work\workplace\test\file\system.log';
$file = fopen($file_path, 'r');
$key = md5(0);
$i = 1;
while (!feof($file)) {
    $buff = fgets($file);
    if ($buff == $key . "\r\n")
    {
        echo "find 0 at Line {$i}\r\n";
    }
    $i ++;
}
fclose($file);我想问下这样性能怎么样吗,不会出现内存泄露或其他问题吧,还有进一步优化的方法吗?

解决方案 »

  1.   

    linux 下 $ split -b 
    分割···
      

  2.   

    为什么要分割啊,用fgets不是每次只去一行,并没有把文件都读取进内存啊
      

  3.   

    我建议你用fgets时最好制定读取的字符数,不要一行一行的读,6G的文件说不定某一行会很长!
      

  4.   

    可以,没有问题。就是很费时间仅就代码而言,可以缩减一点
    $file_path = 'd:\work\workplace\test\file\system.log';
    $file = fopen($file_path, 'r');
    $key = md5(0);
    $i = 1;
    while ($buff = fgets($file)) {
        if ($buff == $key . "\r\n")
        {
            echo "find 0 at Line {$i}\r\n";
        }
        $i ++;
    }
    fclose($file);如果一次读取的多一点(比如1M)可能要快一点。不过算法要复杂些
      

  5.   

    做这种东西,不是php的长项要不搞WEB的话,还是换其它程序搞吧。
      

  6.   

    如果用shell怎么写啊,求达人,没有也很感谢大家
      

  7.   

    我用的fgets读的文件,也不算大吧,150M的一个csv文件,18秒钟,用fgets按行读的话(已知不会出现很长的行),需不需要再用fseek来设定文件指针?可以提高效率吗?