PHP操作超大文件的封装类,SplFileObject类配合使用文件操作相关函数,经多次测试,总结出效率最高的方式;实现在截取指定行slice()、获取前N行head()、获取末尾N行tail()和返回大文件的总行数lines()等方法
<span style="font-family:Microsoft YaHei;"><?php
class FileReader{
private $file;
private $instance;
/**
* 初始化BigFile类
*/
public function __construct($file){
$this->file = $file;
$this->instance = new SplFileObject($file,'r');
}
/**
* 获取大文件的总行数
* @access public
* @return int 返回行数
*/
public function lines(){
/*
//这种方式效率略低
$this->instance->seek(filesize($this->file));
return $this->instance->key();
*/
$sum = 0;
while($this->instance->valid()){
$data = $this->instance->fread(1024*1024*2); //每次读取2M
$num = substr_count($data,"\n"); //计算换行符出现的次数
$sum += $num;