从ssh2_exec获取结果


get result from ssh2_exec

我有一个脚本,可以通过SSH连接到服务器(这很好)。现在我想执行一个命令,并回显从该命令中得到的结果。

所以我这样做:

$stream = ssh2_exec($conn, 'php -v');

但我无法让它显示响应,var_dump返回resource(3) of type (stream)

我尝试过使用:

$stream = ssh2_exec($conn, 'php -v');
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);

但是CCD_ 3返回空字符串。

那么,是否可以将响应打印为脚本的结果呢?

好的,我找到了解决方案,所以我发布它以供将来参考

因此,要输出ssh2_exec执行的命令的结果,您应该使用以下代码设置

$stream = ssh2_exec($conn, 'php -v');
stream_set_blocking($stream, true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
echo stream_get_contents($stream_out);

添加:

echo stream_get_contents($stream);

结果是STREAM,您必须首先获取它的内容。。。

流提取仅用于提取备用子流。。。(afaik)

下面的代码应该将错误消息写入stderr,但如果首先运行对stdout的stream_get_contents()的调用,则对stderr的后续调用将不会返回任何内容。

如果语句的顺序颠倒,则对stderr的调用将返回任何错误,对stdout的调用将不返回任何

https://www.php.net/manual/en/function.ssh2-exec.php#99089