php从大文件中读取最后n行
PHP实现异步调用方法研究

PHP读取较大文件的方案

erhuabushuo posted @ 2011年9月22日 21:09 in PHP , 1595 阅读
<?
/**

* PHP 读取大文件 测试文件大于1G的文本文件
*/

/**

* 文件读取

*

* @param String $filename 文件地址

* @param Int $count 读取得行数

* @param String $sep 每行的分隔标记

* @return String 返回结果

*/

function readBigFile($filename, $count = 20, $tag = “\r\n”) {

    $content = ”;//最终内容

    $_current = ”;//当前读取内容寄存

    $step= 1;//每次走多少字符

    $tagLen = strlen($tag);

    $start = 0;//起始位置

    $i = 0;//计数器

    $handle = fopen($filename,’r+’);//读写模式打开文件,指针指向文件头

    while($i < $count && !feof($handle)) {    //文件没有到结尾和小鱼需要读取得行数时

        fseek($handle, $start, SEEK_SET);//指针设置在文件开头

        $_current = fread($handle,$step);//读取文件

        $content .= $_current;//组合字符串

        $start += $step;//依据步长向前移动

        //依据分隔符的长度截取字符串最后免得几个字符

        $substrTag = substr($content, -$tagLen);

        if ($substrTag == $tag) {    //判断是否为判断是否是换行或其他分隔符

            $i++;

        }

    }

    //关闭文件

    fclose($handle);

    //返回结果

    return $content;

}

$filename = ‘E:/2010log.log’;//需要读取的文件

$tag = “\r\n”;//行分隔符 注意这里必须用双引号

$count = 20;//读取行数

$data = readBigFile($filename,$count,$tag);

echo $data;
?>

 

读取指定开始和结束行

 

<?php
function line_content($filename,$startline,$endline){
        $arr = array();
        $fp=fopen($filename,"r");
        for($i=1;$i<$startline;$i++){
            fgets($fp);
        }
        for($i=$startline;$i<=$endline;$i++){
            array_push($arr, fgetcsv($fp));
        }
        return $arr;
}
print_r(line_content("1.csv",2,4));
?>


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter