加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php读取大文件最好的实现技巧

发布时间:2022-09-15 14:12:08 所属栏目:PHP教程 来源:互联网
导读:php读取大文件方法我们一般是一行行来讲取而不是一次性把文件全部写入内存中了,这样会导致php程序卡死,下面给大家整理一个例子. 读取大文件最后几行数据: /** * 取文件最后$n行 * @param string $filename 文件路径 * @param int $n 最后几行 * @return mi
  php读取大文件方法我们一般是一行行来讲取而不是一次性把文件全部写入内存中了,这样会导致php程序卡死,下面给大家整理一个例子.
 
  读取大文件最后几行数据:
 
  /**
   * 取文件最后$n行
   * @param string $filename 文件路径
   * @param int $n 最后几行
   * @return mixed false表示有错误,成功则返回字符串
   */
  function FileLastLines($filename,$n){
      if(!$fp=fopen($filename,’r')){
          echo ”打开文件失败,请检查文件路径是否正确,路径和文件名不要包含中文”;
          return false;
      }
      $pos=-2;
      $eof=”";
      $str=”";
      while($n>0){
          while($eof!=”n”){
              if(!fseek($fp,$pos,SEEK_END)){
                  $eof=fgetc($fp);
                  $pos–;
              }else{
                  break;
              }
          }
          $str.=fgets($fp);
          $eof=”";
          $n–;
      }
      return $str;
  }
  echo nl2br(FileLastLines(‘sss.txt’,4));
  /**  * 取文件最后$n行  * @param string $filename 文件路径  * @param int $n 最后几行  * @return mixed false表示有错误,成功则返回字符串  */ function FileLastLines($filename,$n){     if(!$fp=fopen($filename,'r')){         echo "打开文件失败,请检查文件路径是否正确,路径和文件名不要包含中文";         return false;     }     $pos=-2;     $eof="";     $str="";     while($n>0){         while($eof!="n"){             if(!fseek($fp,$pos,SEEK_END)){                 $eof=fgetc($fp);                 $pos--;             }else{                 break;             }         }         $str.=fgets($fp);         $eof="";         $n--;     }     return $str; } echo nl2br(FileLastLines('sss.txt',4));
  //开源软件:phpfensi.com
  function tail($fp,$n,$base=5)
  {
  assert($n>0);
  $pos = $n+1;
  $lines = array();
  while(count($lines)< =$n){
  try{
  fseek($fp,-$pos,SEEK_END);
  } catch (Exception $e){
  fseek(0);
  break;
  }
  $pos *= $base;
  while(!feof($fp)){
  array_unshift($lines,fgets($fp));
  }
  }
  return array_slice($lines,0,$n);
  }
  var_dump(tail(fopen("access.log","r+"),10));
  $fp = fopen($file, "r");
  $line = 10;
  $pos = -2;
  $t = " ";
  $data = "";
  while ($line > 0) {
  while ($t != "n") {
  fseek($fp, $pos, SEEK_END);
  $t = fgetc($fp);
  $pos --;
  }
  $t = " ";
  $data .= fgets($fp);
  $line --;
  }
  fclose ($fp);
  echo $data

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读