我有一个 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”,我仍然需要阅读所有其他文本。有什么办法可以让我只阅读那部分吗?
附:数据库不是一个选择,将文件分割成更小的文件也是不切实际的。
我想你正在寻找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;
}
Then:
$fname='myfile.txt';
$DATA_LENGTH = 50;
$wanted_data = 12;
$data = getDataFromFile($fname, $DATA_LENGTH*$wanted_data, $DATA_LENGTH);
我希望这有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)