使基于cli的PHP脚本的输出可以从web上查看,而无需通过管道传输到文件?

使基于cli的PHP脚本的输出可以从web上查看,而无需通过管道传输到文件?,php,pipe,command-line-interface,gnu-screen,Php,Pipe,Command Line Interface,Gnu Screen,我有一个命令行PHP脚本,它在我的服务器上以“屏幕”会话持续运行(无限循环)。PHP脚本使用echo输出各种数据行 我想做的是创建一个PHPWeb脚本来连接命令行脚本,这样我就可以查看echo输出,而不必通过SSH连接到服务器 我曾考虑将所有echo语句写入/管道传输到文本文件,然后让web脚本读取文本文件。这里的问题是文本文件将在几分钟内增长到几兆字节 有人知道更优雅的解决方案吗?CLI脚本可以这样写入文件: file_put_contents( '/var/log/cli-log-'.dat

我有一个命令行PHP脚本,它在我的服务器上以“屏幕”会话持续运行(无限循环)。PHP脚本使用echo输出各种数据行

我想做的是创建一个PHPWeb脚本来连接命令行脚本,这样我就可以查看echo输出,而不必通过SSH连接到服务器

我曾考虑将所有echo语句写入/管道传输到文本文件,然后让web脚本读取文本文件。这里的问题是文本文件将在几分钟内增长到几兆字节


有人知道更优雅的解决方案吗?

CLI脚本可以这样写入文件:

file_put_contents( '/var/log/cli-log-'.date('YmdHi').'.log', $data );
$log = file_get_contents( '/var/log/cli-log-'.date('YmdHi').'.log' );
因此,每分钟都会创建一个新的日志文件,以减小文件大小。然后,您可以在此时清理目录,删除以前的日志文件或移动它们,或者执行任何您想执行的操作

然后web脚本可以从当前日志文件中读取,如下所示:

file_put_contents( '/var/log/cli-log-'.date('YmdHi').'.log', $data );
$log = file_get_contents( '/var/log/cli-log-'.date('YmdHi').'.log' );

正如Elias Van Ootegem所建议的,我肯定会推荐一个cron,而不是一个持续运行的脚本

如果你想从Web脚本中查看数据,你可以做一些事情……一个是把数据写到日志文件或数据库,这样你就可以稍后再把它拔出来……如果你有这么多的数据(如果是可能的话),我会考虑限制你输出的东西。 我有很多cron向我发送电子邮件数据,不确定这是否适用于你,但我想我会提到它

我能想到的最优雅的建议是在web脚本中使用exec运行命令,如果您使用它,它将直接输出到browse:

如果您有它,我认为它对您有用


另一个选项是使用-无需使用磁盘,读取端在出现时有可用的输出。

crontab而不是无限循环?在mongodb中使用capped集合可能有助于解决输出文件增长过大的问题。我认为一些异步技术,如ajax或node.js可能会奏效。浏览器可以等待PHP脚本的响应,然后在收到响应后,用javascript或jQuery在屏幕上显示,然后立即开始等待另一个响应。这些数据行是否被送入MySQL之类的数据库?可能需要暂时将数据放入数据库,然后在将行发送到浏览器后从数据库中删除行。不,不幸的是,这是设计上的无限循环。此外,循环的每次“扫描”都会产生一个数MB的文件。我真正想要的是对正在发生的事情的半实时视图。@trpt4him主命令行PHP脚本正在web根目录之外的位置运行,因此即使使用AJAX,我也不确定它将如何与之交互?脚本确实会将结果写入数据库,但我对它没有写入的内容感兴趣。很抱歉,无限循环对我来说很糟糕。我使用@trpt4him:node.js将非常适合,由于它的非阻塞IO,它允许您在脚本运行时访问其输出。它在空闲方面也很好,因此您不需要无限循环构造,但可以处理事件