ssh2_exec rand返回进程ID?

时间:2010-11-03 12:49:35

标签: php ssh

有时当我运行此代码时,我得到一个进程和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;
    }       
}

1 个答案:

答案 0 :(得分:1)

我上次使用ssh2 PECL扩展时遇到了类似的问题。它似乎与libssh2有点不相关:我之前没有遇到任何问题,然后我升级了libssh2并且开始偶尔接收空的响应,没有明显的原因。 ssh2_exec仍会执行命令,但有时我会得到输出,有时我不会。

不幸的是,这个扩展自2008年以来一直没有维护,仍然处于Beta状态(0.11.0)。您可能想要查看一些SSH2第三方库(其中一些是LGPL或GPL)。我从来没能解决这个问题。

修改

2天前(2010年11月3日),维护者发布了一个显然与最新的libssh2配合使用的补丁,虽然我自己没有测试过。您可能希望升级到0.11.2。