加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php实现读取超大文件的办法

发布时间:2022-09-14 04:46:53 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了php实现读取超大文件的方法,需要的朋友可以参考下 通常来说在php读取大文件的时候,我们采用的方法一般是一行行来讲取,而不是一次性把文件全部写入内存中,这样会导致php程序卡死,下面就给大家介绍这样一个例子。 读取大文件最后几行
  这篇文章主要介绍了php实现读取超大文件的方法,需要的朋友可以参考下
 
  通常来说在php读取大文件的时候,我们采用的方法一般是一行行来讲取,而不是一次性把文件全部写入内存中,这样会导致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));
   
  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;
  ?>
  读者可以根据该实例特点加以改进和完善,使之更加符合自身应用需求。

(编辑:开发网_郴州站长网)

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

    热点阅读