gpt4 book ai didi

php - 如何使用异步脚本获取 tail -f 结果?

转载 作者:搜寻专家 更新时间:2023-10-31 21:47:37 25 4
gpt4 key购买 nike

我有一个 PHP 页面,我想在其中显示最近 3 秒内新添加的行到日志文件。目前,我正在使用 jQuery get 函数运行一个 PHP 文件,该文件依次运行 shell_exec。

我正在使用这些脚本:

主页上的 jQuery:

setInterval(function(){
$.get('tailer.php', function(data) {
alert(data);
});
}, 3000);

tailer.php:

<?php
$result = shell_exec("timeout 3s sudo tail -f log.txt");
echo $result;
?>

问题是,当我从命令行运行 tailer.php 脚本时,它会按预期返回行。但是当使用浏览器运行同一个文件时,它不会停止加载并且不返回任何内容。因此主 PHP 页面中的脚本不会发出任何警报。

我能够缩小问题范围并注意到从 tail 命令中删除 -f 开关时,一切都很好。问题仅在于 -f 开关。你能帮忙吗?

最佳答案

第一个问题

PHP 引擎在请求到来时执行 php 代码,并在执行完成时返回 php 代码的输出(您仍然可以使用 flush 函数手动刷新输出缓冲区)。执行 shell 脚本时,您的 php 代码似乎被阻止(等待)。

第二个问题

我会建议写一个脚本运行后台只是为了将文件更改放入 Redis 并使用 ajax 来查询 Redis 以进行更新。如果你想要纯 php 代码,我找不到一个合理的解决方案(PHP 不是长连接的最佳工具)。

顺便说一句,建立多个连接时会同时执行多个shell脚本,这对于这样的文件监视作业来说是不够的。

关于php - 如何使用异步脚本获取 tail -f 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54606337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com