大数据文件读取方法

<?php
$filePath = '1.txt';
$step = 1024*1024;// 1M   
$str = "\r\n";
$start = 0;
$i = 1;
$count = 0;

do{
    $arr = readBigFile($filePath, $step, $str,$start);
    $start += @$arr[1];
    $i = @$arr[2];
    $info = @$arr[0];
    if(!empty($info)){
        $count++;
    }
    
}while ($i==1);
echo $count;
/**
 * file_get_contents 读取大文件方法
 * @param unknown $pathA 文件路径
 * @param unknown $step    每次读取的字符串长度
 * @param unknown $str 分隔符
 * @param unknown $start 默认从0开始读取
 * return 带字符串的数组
 */
function readBigFile($filePath,$step,$str,$start = 0){
    $arr = array();
    $info = file_get_contents($filePath,false,null,$start,$step);
    if($info == false){
        $arr = array("",$start,0);
    }else{
        $index = strrpos($info, $str);//分隔符最后一次出现的位置
        if($info === false){
            echo $str." is not a separator!";
            die;
        }
        $lengthStr = strlen($str);//分隔符的长度
        $start = $index+$lengthStr;
        $lengthInfo = strlen($info);
        if($lengthInfo<$step){
            $arr = array($info,$start,0);
        }else{
            $arr = array($info,$start,1);
        }
    }
    return $arr;
}

自己写的一个大数据文件读取的实例,有什么意见,可以互相探讨!

posted @ 2018-12-20 16:47  诚享人生  阅读(1052)  评论(0编辑  收藏  举报