【问题标题】:Having real time output from ssh run with php使用 php 运行 ssh 的实时输出
【发布时间】:2012-02-15 18:19:48
【问题描述】:

我正在尝试使用 php 编写本质上是一个交互式 ssh 系统,我需要让 php 使用 ssh_exec 或 shell 在远程服务器上执行命令,并实时收集命令的输出。

我已经搞砸了输出缓冲和flush(),直到我脸色发青,即将命令将其输出重定向到文件,并有一个单独的脚本使用sftp轮询该文件的内容和使用 jquery 更新页面上的输出 div。

就在我走这条漫长的道路之前,有没有人有一个使用单个脚本的解决方案?

谢谢!

【问题讨论】:

    标签: php jquery ssh


    【解决方案1】:

    没有这样的事情可以使用单个脚本可靠地工作:您几乎无法控制服务器端的缓冲 - flush() 可能会或可能不会按预期工作,具体取决于您是否使用 mod_php、@987654323 @、FCGI 或其他任何东西,并且您完全无法控制客户端的缓冲(IE 在这里臭名昭著)。

    去过那里,做过,用 AJAX 做过。

    【讨论】:

    • 听起来你已经踏上了我要走的路。你愿意分享你的代码吗?很高兴以网站的形式分享我的最终解决方案!
    • 如果没有,您能否概述一下您为使用 ajax 获取结果所做的工作?我正在与之交谈的服务器可能不是 Web 服务器,所以我不能只输出到文件并使用 http 获取,你会说执行常规 sftp 请求并使用 jquery 将结果输出到 div 是正确的解决方案吗?对我来说似乎很重!
    • 我很愿意,但我可能不会——它现在属于客户。但这很容易:我启动了外部命令(在我的情况下,它是一个长时间运行的导入脚本)并将输出重定向到一个文件中,设置一个会话变量 $seek=0。 Ajax 等待 500ms,从位置 $seek 读取文件到最后,记住 $seek 中的新位置,并返回读取的文本。
    • 您不需要目标机器上的网络服务器,只要您可以从运行脚本的网络服务器读取结果文件(通过 SSH)。
    【解决方案2】:

    会不会像下面这样行不通?

    $output = shell_exec($theScript);
    file_put_contents($someFile, $output, FILE_APPEND);
    

    还是我弄错了?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 2017-02-01
      • 2015-12-23
      • 1970-01-01
      相关资源
      最近更新 更多