【发布时间】:2019-01-08 17:11:08
【问题描述】:
这个 PHP sn-p 应该通过 SSH 执行一个简单的命令(精简到最小的工作示例):
$sshconn = ssh2_connect($HostAddr, 22);
ssh2_auth_pubkey_file($sshconn, $user, $sshkey . '.pub', $sshkey);
$stdout = ssh2_exec($sshconn, 'echo hello');
if ($stdout !== false)
{
stream_set_blocking($stdout, true);
while (!feof($stdout))
{
$proc_stdout = fgets($stdout, 3E6);
if ($proc_stdout !== false) echo $proc_stdout;
}
fclose($stdout);
}
只要有任何输出到标准输出,就可以很好地工作。但是,如果 stdout 保持为空,则循环将变为无限循环。
$stdout = ssh2_exec($sshconn, 'echo hello >&2');
如果
- stdout 可能为空
- 但 stdout 也可能非常大(几千兆字节,不可能通过一次调用
stream_get_contents或类似的方法将变量放入变量中)。
附录:我挂起的真实世界代码使用未知参数执行 mysqldump。显然,echo -n >&2 按预期工作,尽管它的标准输出也是空的。
【问题讨论】: