PHP读取较大文件的方案
erhuabushuo
posted @ 2011年9月22日 21:09
in PHP
, 1636 阅读
<? /** * 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));
?>