Php file()是否适用于平均5000-6000行,或者我必须编辑它以获得更好的性能?

Php file()是否适用于平均5000-6000行,或者我必须编辑它以获得更好的性能?,php,Php,文本文件(我的函数grab info)每天00:00重新创建,我的应用程序在白天缓慢启动,以逐行添加日志文件。该文件大约为1MB,一天结束时大约有6000行。所以,这不是一个很小的文件该函数从文本文件中获取最新的21行,以显示游戏中最新的21次死亡/死亡,许多用户可以访问该脚本以检查日志统计信息。我的问题是如何使脚本具有更好的性能,因为file()实际上是逐行读取整个文件,那么,有什么更好的方法可以做到这一点呢?如果有很多人访问日志页面,从文本文件或6000行中显示此信息,这会影响性能吗?应该都

文本文件(我的函数grab info)每天00:00重新创建,我的应用程序在白天缓慢启动,以逐行添加日志文件。该文件大约为1MB,一天结束时大约有6000行。所以,这不是一个很小的文件
该函数从文本文件中获取最新的21行,以显示游戏中最新的21次死亡/死亡,许多用户可以访问该脚本以检查日志统计信息。
我的问题是如何使脚本具有更好的性能,因为
file()
实际上是逐行读取整个文件,那么,有什么更好的方法可以做到这一点呢?如果有很多人访问日志页面,从文本文件或6000行中显示此信息,这会影响性能吗?应该都很好吧?
该文件为.txt格式的纯文本,以下是该文件中的示例行:

1,42,16, 201,stackoverflow_user, 1, 6762160, 39799, 9817242, 6762160, 39884, 10010545,stackoverflow_user, 2, 1351147, 1165, 483259, 1351147, 1115, 241630, 0 
1,46,27, 201,[stackoverflow_user | stackoverflow_userother], 1, 4078465, 286991, 1594830, 4078465, 287036, 1643156,stackoverflow_user, 2, 1357147, 1115, 241630, 1357147, 1065, 120815, 0
我的功能:

# read a file into an array
$lines = file('C:/path/to/file.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

# flip our array over so the last lines of the file are first.
$lines = array_reverse($lines);
$n = 1;
$wanted = 21; # or however many lines you want.
$content = '';

foreach ($lines as $l) {
   # treat the data as comma-separated values
   $arr = explode(",", $l);
   # if col 5 has multiple values, take the first one
   if (preg_match("/\[(.+?) \|/", $arr[4], $matches)) {
       $arr[4] = $matches[1];
   }
   # is arr[4] the same as arr[12]?
   if ($arr[4] !== $arr[12]) {
       # these two are not equal, so use these values
       $data = array('rank-pos' => $n++, 'rank-name' => $arr[4], 'rank-dmuser' => $arr[12]);
       $content .= Template::Load('rankinguserdm-' . ($n % 2 == 1 ? 2 : 1), $data);
   }
   # have we got enough data?
   if ($n === $wanted) {
       break;
   }
}

        $this->content = Template::Load('user_rankingsdm', array('rankings' => $content));
    }

如果您在unix系统上运行,请考虑调用tail

<?php
$file = log.txt;
$last_lines = `tail -n 21 $file`; // backticks indicate system call
print_r($last_lines);

为什么不使用数据库?SQLite立即浮现在我的脑海中…我不能使用数据库,因为应用程序正在向该文本文件写入信息,我必须使用该功能获取该信息并将其显示在我的网站上。另外,我正在MSSQL Server 2005上运行。所以,我的问题是,
file()
是否适合这样做(我担心的是,如果有更多的人访问日志统计页面来查看日志,从而导致服务器过载?!)或者我必须使用
fopen
或其他什么?你可能对阅读感兴趣是的,我明白了。但是您可以编写一个简单的服务(由守护进程运行,例如所有30个守护进程)来读取文件并将其存储在数据库中。然后你的应用程序从那里读取它的所有好处。我很确定数据库可以很好地处理你的需求,并且不会“过载”。而且它们比文件解决方案更具可扩展性我正在Windows Server 2008 R2 Enterprise上运行。所以,
tail
不是我的选择/你能使用windows的等效软件吗?我明白,但是当我的文件大小约为1MB,有5000-6000行时,这会比
file()
有更好的性能提升吗?