我的目标是使用PHP和Shell脚本创建日志文件阅读器。 我计划每隔一段时间运行一次脚本,以便检测特定条目最后一次显示在日志文件中。
它的工作方式是调用PHP脚本,然后调用shell命令
tac logfile.log | grep "what i am looking for" | head -n 1
或
tac logfile.log | head -n 1
这个脚本将做的是:
在第一个脚本的情况下:从底部向上扫描日志文件,直到找到它要查找的内容并向我显示第一行,这实际上是该行的最后一次出现在文件中。
在第二个脚本的情况下:仅扫描最后一行并输出它。我不是试图拖尾文件。
所以我的目的是扫描文件从最后到最后一次出现,但我需要php才能这样做,因为PHP可以解析它从shell输出中读取的行并轻松解析它们。
我试图解决的问题是,一旦我使用函数shell_exec,exec,反引号操作符,系统等从PHP运行脚本。它们都保持PHP脚本运行或输出结果并保留第一部分shell运行(tac logfile.log)。
我不明白为什么它可以从CLI完美运行,但是当我从PHP运行相同的脚本时尝试输入整个日志文件无限期地运行。我注意到tac和cat给出了这个问题。有时它会显示错误“Broken pipe”。
我该怎么办?我该如何解决这个问题?
答案 0 :(得分:0)
你可以使用纯PHP。使用fopen打开文件,可以在Read a file backwards line by line using fseek找到如何向后读取文件的示例 而不是在找到你搜索的字符串之后断开循环。