海运的博客

PHP读取大文件指定行

发布时间:December 1, 2013 // 分类:PHP // No Comments

<?php
 function getFileLines($filename, $startLine = 1, $endLine = 50, $method = 'rb'){
     $content = array();
    
     if (version_compare(PHP_VERSION, '5.1.0', '>=')){ // 5.1版本之上使用Splfileobject
         $count = $endLine - $startLine;
         $fp = new SplFileObject($filename, $method);
         $fp -> seek($startLine - 1); // 转到$startLine行,seek方法从0开始计数
         for ($i = 0; $i <= $count; ++$i){
             $content[] = trim(($fp -> current()), "\n"); //current()方法取当前行清除换行保存到数组
             $fp -> next(); //循环下一行
             }
         }else{ // PHP<5.1
         $fp = fopen($filename, $method);
         if (!$fp)
             return 'error:can not read file';
         for ($i = 1; $i < $startLine; ++$i){ //定位到$startLine行
             fgets($fp);
            }
        
        for ($i; $i <= $endLine; ++$i){
             $content[] = fgets($fp); //从$startLine行开始循环读取到$endLine行
            }
        fclose($fp);
        }
    return array_filter($content); //返回array_filter(flase,null,0)过滤后的数组
    }
?>

示例:

<?php
$filename = 'file.txt';
$start = 1;
$end = 10;
$count = $end - $start;
while (true){
     $data = getFileLines($filename, $start, $end);
     // var_dump($data);
    $rev = ver($data);
     if($data[9] == ''){
         die("End");
         sleep(10);
        }
    $start = $start + 10;
    $end = $end + 10;
    }
?>

标签:php

发表评论

分类
最新文章
最近回复
  • chainofhonor: 感谢,用dnsmasq设置自动判断BIOS和UEFI成功了
  • 海运: 不好意思,这个是很多年前的,现在也许已经不适用,我现在也不用多线了。
  • CQ: -m state --state NEW 替换成-m conntrack --ctstate NEW
  • CQ: 你好,我入站已经成功分流,但是不知道出站怎么设置,PREROUTING替换成POSTROUTI...
  • K: 好的,谢谢,我去试试!
  • 海运: 可以试试3proxy
  • daha: PHP的怎么使用???
  • 海运: 换回了5.3内核,5.8用5.3 dtb虽然能开机且负载正常,但也有其它问题,不建议使用。
  • shangyatsen: 后面的内核高精度计时器的问题使用5.4或者5.3的dtb会正常吗?我也发现有这个日志出现。感觉...
  • 海运: 缺少相应模块?