2

我的目标是使用 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 日志文件.log)。

我不明白为什么它可以从 CLI 完美运行,但是当我从 PHP 运行相同的脚本时,它会通过尝试 tac 整个日志文件来无限期地运行。我注意到 tac 和 cat 给出了这个问题。有时它会显示错误“Broken pipe”。

我应该做什么?我怎样才能解决这个问题?

4

1 回答 1

0

您可以使用纯 PHP。使用 fopen 打开文件,如何向后读取文件的示例可以在使用 fseek 逐行向后读取文件中找到, 而不是在找到要搜索的字符串后中断循环。

于 2013-01-31T14:07:36.080 回答