background image

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) 
代码如下: