海运的博客

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

评论已关闭

分类
最新文章
最近回复
  • opnfense: 谢谢博主!!!解决问题了!!!我之前一直以为内置的odhcp6就是唯一管理ipv6的方式
  • liyk: 这个方法获取的IPv6大概20分钟之后就会失效,默认路由先消失,然后Global IPV6再消失
  • 海运: 不好意思,没有。
  • zongboa: 您好,請問一下有immortalwrt設定guest Wi-Fi的GUI教學嗎?感謝您。
  • 海运: 恩山有很多。
  • swsend: 大佬可以分享一下固件吗,谢谢。
  • Jimmy: 方法一 nghtp3步骤需要改成如下才能编译成功: git clone https://git...
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...