<?php
/**
* 使用方法:
* include('./FileReader.php');
* $file = __DIR__.'/20190204 103 EDA CA1.csv';
* $reader = new FileReader($file);
* $line_number = $reader->get_lines();
* $data = $reader->get_data(10,10);
* Class FileReader
*/
class FileReader
{
private $file_name;
private $spl_object = null;
private $error;
private $file_type;
public function __construct($file_name = '')
{
if ($file_name && file_exists($file_name)) {
$this->file_name = $file_name;
}
$fileExtension = pathinfo($file_name, PATHINFO_EXTENSION);
if ($fileExtension == 'csv') {
$this->file_type = 'csv';
}
}
public function set_file_name($file_name)
{
if (!$file_name || !file_exists($file_name)) {
$this->error = 'File invalid';
return false;
}
$this->file_name = $file_name;
$this->spl_object = null;
}
public function get_file_name()
{
return $this->file_name;
}
private function _file_valid($file = '')
{
$file = $file ? $file : $this->file_name;
if (!$file || !file_exists($file)) {
return false;
}
if (!is_readable($file)) {
return false;
}
return true;
}
private function _open_file()
{
if (!$this->_file_valid()) {
$this->error = 'File invalid';
return false;
}
if ($this->spl_object == null) {
$this->spl_object = new \SplFileObject($this->file_name, 'rb');
}
return true;
}
public function get_data($length = 0, $start = 0)
{
if (!$this->_open_file()) {
return false;
}
if($this->file_type == 'csv'){
$this->spl_object->setFlags(\SplFileObject::READ_CSV);
}
$length = $length > 0 ? $length : $this->get_lines();
$start = ($start < 0) ? 0 : $start;
$data = array();
$this->spl_object->seek($start);
for($i = 0; $i < $length; ++$i) {
$dataline = $this->spl_object->current();
if (empty($dataline)) {
if($this->spl_object->eof()){
break;
}
continue;
} else {
$data[] = yield $dataline;
}
$this->spl_object->next();
}
return $data;
}
public function get_lines()
{
if (!$this->_open_file()) {
return false;
}
$this->spl_object->seek(filesize($this->file_name));
return $this->spl_object->key();
}
public function get_error()
{
return $this->error;
}
}
php FileReader读取大文件特定行数
于 2023-06-25 11:47:27 首次发布