有时当我运行此代码时,我得到一个进程和id,有时命令会执行,但数据返回保持为空?有人知道如何正确地捕捉溪流吗?
/**
* Run command in background and returns the process id
*
* @param string $cmd
* @return int process id
*/
public function runBackground($cmd)
{
$cmd = $cmd." > /dev/null & echo $!";
if (!($stream = ssh2_exec($this->_connection, $cmd ))) {
return "fail: unable to execute command\n";
} else {
// collect returning data from command
stream_set_blocking($stream, true);
$data = "";
while ($buf = fread($stream,4096)) {
$data .= $buf;
}
fclose($stream);
return (int)$data;
}
}
答案 0 :(得分:1)
我上次使用ssh2 PECL扩展时遇到了类似的问题。它似乎与libssh2有点不相关:我之前没有遇到任何问题,然后我升级了libssh2并且开始偶尔接收空的响应,没有明显的原因。 ssh2_exec仍会执行命令,但有时我会得到输出,有时我不会。
不幸的是,这个扩展自2008年以来一直没有维护,仍然处于Beta状态(0.11.0)。您可能想要查看一些SSH2第三方库(其中一些是LGPL或GPL)。我从来没能解决这个问题。
修改强>
2天前(2010年11月3日),维护者发布了一个显然与最新的libssh2配合使用的补丁,虽然我自己没有测试过。您可能希望升级到0.11.2。