2

我有一个用于记录客户端 IP 地址的文件。他们希望保留文件的最后 500 行。它在带有 PHP4 的 Linux 系统上(哦不!)。

我打算用新的 IP 地址一次一行地添加到文件中。我们无权访问 cron,所以我可能需要让这个函数也进行行限制清理。

我在考虑使用likeexec('tail [some params]')或者用PHP 读取文件,在换行符上将其分解为数组,获取最后1000 个元素,然后将其写回。似乎有点内存密集型。

有什么更好的方法来做到这一点?

更新:

根据下面@meagar 的评论,如果我想使用 zip 功能,我将如何在我的 PHP 脚本中做到这一点?(无法访问 cron)

如果(兰德(0,10)== 10){
 shell_exec("查找 .logfile.txt [其中大小 > 1mb] -exec zip {} \;")
}

如果存在现有文件,zip 会自动枚举文件还是我需要手动执行?

4

3 回答 3

2

正如您所建议的,最快的方法可能是使用tail:

passthru("tail -n 500 $filename");

(passthru 与 exec 的作用相同,只是它将整个程序输出输出到 stdout。您可以使用输出缓冲区捕获输出)

[编辑]

我同意先前的评论,即日志轮换会无限好...但是您确实声明您无权访问 cron,所以我假设您也无法进行 logrotate。

于 2011-06-14T15:55:05.143 回答
2

对数旋转

这将是“正确”的答案,而且设置起来也不难。

于 2011-06-14T15:59:27.513 回答
0

您可以使用 count(explode("\n", file_get_contents("log.txt"))) 获取行数,如果等于 1000,则获取从第一个 \n 开始到末尾的子字符串,添加新的 IP 地址并再次写入整个文件。几乎和a+模式打开文件写入新IP一样。

于 2011-06-14T15:58:02.790 回答