用fopen fseek 等操作超过2g的文件就会出错
php现在只支持到2g的文件
请问怎么解决呢,对文件大小没有限制呢?

解决方案 »

  1.   

    不要一次全部读入到内存中,PHP是有内存限制的。
    使用fseek定位文件指针,仅读取需要的部分,及时释放。
      

  2.   

    fseek最大偏移就是2g了,读2g后面的读不到啊
      

  3.   

    32位php,2G 约为 PHP_INT_MAX/pow(1024,3),再往前+1就溢出了.
      

  4.   


    $fp = fopen ("file2g.txt", "r");
    $content = '';
    $test = false;
    while (!feof($handle)) {
      $r = fread($handle, 1);  //比如每次读一个字节
      if($r=="\n"){
        //假设你是用\n对字符串进行分割的
        if($content=='aaaa'){
          $test=true;
        }
        $content = '';
      }else{
        $content .= $r;    
      }
    }
    fclose($handle);这就是指针读取了,你的文件总是有规则的吧,按规则切分开了,做你要的判断,如果你把读取的所有字符串直接赋值给一个变量的肯定也是不能操作的了2g的文件,建议最好分割成多文件进行操作
      

  5.   

    LZ不是扯淡么,你想支持2G以上的文件读取就不要用32位的系统,人家foolbirdflyfirst已经非常专业的告诉你答案了,你还在问个鸟,实话告诉你,你想在32位系统下读2G以上的文件就好比你现在只有1万快钱你又不贷款想买100万的房子,可能么?
      

  6.   

    首先32位系统下通过php本身是不可以读取大于2g的文件,但是通过写php的扩展程序时可以的,windows下的话使用vc的一些读取文件的接口就可以,linux系统的话那就更简单了。但是这种解决方法可移植性太差。我现在是问一下有没有其他的解决方法。