网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 PHP常用文件操作函数和简单实例分析
内容
    下面小编就为大家带来一篇PHP读取大文件末尾N行的高效方法推荐。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。
    小文件几兆以内大小,都可以通过file()函数,将文件按行读入数组,在用array_pop取得最后一行,就可以了。
    但是对于很大的文本文件来说,机器内存不够大,或者php本身memory_limit有限制,这个办法就不适用了,即使强行不限制,效率也是非常低的。
    没有办法了吗?当然有,不过没有现成的函数了,需要自己动手了。
    这里需要用到文件指针,学过C的应该知道指针式个嘛玩意,通俗的讲吧,PHP中通过fopen打开一个文件,这时候还没有读取文件,这时候指向的是文件开头,指针位置也就是0,当你通过fgets或者fgetc从文件中读取内容的时候,你读多少,指针也相应往前进多少,这也是
    while(!feof($fp)){
    $data.=fgets($fp,4096);
    }
    得以实现的原理,即fgets是从当前指针位置向后读取指定长度的字符串,直到遇见换行符为止。
    那么可不可以控制指针的位置到倒数第N行位置呢?很遗憾,没有,但是可以将指针直接移动到末尾,并倒退N个位置,通过fseek()函数。
    我们先将指针移动到末尾,并向后倒退2个位置,通过fgetc读取一个字符,判断这个字符是不是"\n"也就是换行符,如果不是换行符,那么继续倒退一个位置再次判断,直到我们倒退到上一行的结尾换行符为止,直接使用fgets将一整行都取出来即可。这里面用到两个while循环,外层循环控制需要取得的行数,内层循环控制fseek动作。
    函数如下:
    /**
     * 取文件最后$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));
    以上这篇PHP读取大文件末尾N行的高效方法推荐就是小编分享给大家的全部内容了,希望能给大家一个参考
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/23 14:15:31