我有一个文件,用于记录客户端的 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/