if
(substr_count(
$readData
, "\n") >=
$num
+ 1) {
preg_match("!(.*?\n){".(
$num
)."}$!",
$readData
,
$match
);
$data
=
$match
[0];
break
;
}
}
fclose(
$fp
);
echo
$data
;
我机器是 2 个 G 的内存,当按下 F5 运行时,系统直接变灰,差不多 20 分钟后才恢复过
来,可见将这么大的文件全部直接读入内存,后果是多少严重,所以不在万不得以,
memory_limit 这东西不能调得太高,否则只有打电话给机房,让 reset 机器了.
2.直接调用 linux 的 tail
命令来显示最后几行
在 linux 命令行下,可以直接使用 tail -n 10 access.log 很轻易的显示日志文件最后几行,可以
直接用 php 来调用 tail 命令,执行 php 代码如下.
整个代码执行完成耗时 0.0034 (s)
代码如下:
file = 'access.log';
$file
=
escapeshellarg
(
$file
);
//
对命令行参数进行安全转义
$line
= `tail -n 1
$file
`;
echo
$line
;
3. 直接使用 php 的
fseek
来进行文件操作
这种方式是最为普遍的方式,它不需要将文件的内容全部读入内容,而是直接通过指针来操
作,所以效率是相当高效的.在使用
fseek
来对文件进行操作时,也有多种不同的方法,效率可
能也是略有差别的,下面是常用的两种方法.
方法一
首先通过
fseek
找到文件的最后一位 EOF,然后找最后一行的起始位置,取这一行的数据,
再找次一行的起始位置,再取这一行的位置,依次类推,直到找到了
$num
行。
实现代码如下
整个代码执行完成耗时 0.0095 (s)
代码如下: