php - 如何使用 Linux 或 PHP 将文件保持在 1000 行?

标签 php linux unix logging tail

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

我打算一次向文件添加一行新的 IP 地址。我们无权访问 cron,因此我可能需要让此函数也执行行限制清理。

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

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

更新:

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

if(rand(0,10) == 10){
 shell_exec("find . logfile.txt [where size > 1mb] -exec zip {} \;")
}

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

最佳答案

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

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

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

[编辑]

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

关于php - 如何使用 Linux 或 PHP 将文件保持在 1000 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6346371/

相关文章:

php/mysql - while 循环..pass 结果在数组中?

mysql - future mysql 中的 UNIX 时间戳

c - 为什么我需要在写入 stderr 之前在 stdout 上使用 fflush?

php - 如何在 yii 中设置与同一张表的 self 关系

PHP 函数错误未更新密码但收到 ok 消息

php - 编辑 bootstrap.php 以自定义 Dotenv 行为

bash - 如何每次使用新输出创建新文件

linux - psql - Mac 尝试连​​接安装在远程服务器虚拟机中的 Ubuntu 系统中的 postgreSQL

c++ - 什么会使 ios::fail() 评估为 1?

php - Docker php :5. 6-Apache 开发环境缺少卷装载权限