我怎样才能只阅读部分文本文件?

时间:2013-05-24 18:17:59

标签: php file text

我有一个PHP脚本,可以使用大型文本文件,主要是日志文件。问题是大多数时候我只想要一部分,从一个分裂点到另一个分裂点。但是,只读取一个2GB的文本文件才能获得一小部分文本,这会减慢进程。

有什么办法可以只读取部分文本而不必将整个文件读入内存?

数据存储如下:

|18.05.2013: some log info here...
|19.05.2013: some log info here...
|20.05.2013: some log info here...
|21.05.2013: some log info here...
|22.05.2013: some log info here...
| etc...

因此,如果我只想要“19.05.2012”,我仍然需要阅读所有其他文本。有什么办法我只能阅读那部分内容吗?

P.S。数据库不是一个选项,将文件拆分为较小的文件也是不切实际的。

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找fseek

但是,您需要以第X个字符是第Y个数据的开头的方式格式化数据。实际上,如果每个日志的长度都相同,这可能是一种有效的方法。否则,您仍然需要读取每一行来搜索它。

让我们想象一下(未经测试,但只是为了让你开始):

function getDataFromFile($fileName, $start, $length) {
    $f_handle = fopen($filename, 'r');
    fseek($f_handle, $start);
    $str = fgets($length);
    fclose($f_handle);
    return $str;
}

然后:

$fname='myfile.txt';
$DATA_LENGTH = 50;
$wanted_data = 12;

$data = getDataFromFile($fname, $DATA_LENGTH*$wanted_data, $DATA_LENGTH);

我希望这会有所帮助。