1

我正在使用SSH2将流建立到运行修改后的 linux 的设备中。建立流后,我将阻塞设置为 true 并开始读取输出。一旦我看到“Last”这个词,我就知道系统已经准备好接受命令,所以我发送了一个。然后我读取了该命令生成的输出。

这一切都很完美,除了我必须手动关闭流。我很确定我没有收到 EOF 或换行符,这可能就是为什么,但是,这对我来说是全新的,所以我可能是错的。

输出完成后希望退出。

这是我在发送第一个命令之前要查找的内容:

Last login: Tue May  7 06:41:55 PDT 2013 from 10.150.102.115

回显输出的循环。我必须检查“最后”这个词 - 如果它不止一次出现,我会忽略它。(它导致循环重复。):

// Prevents premature termination
$lastCount = 1;
stream_set_blocking($stdio, true);
while($line = fgets($stdio)) {
    $count++;
    flush();
    if (strstr($line, 'Last') && $lastCount == 1) {
        fwrite($stdio,$command . PHP_EOL);
        $lastCount--;
    }
    echo $line;
}
fclose($stdio);
4

2 回答 2

2

您的模式不正确,应设置为 0。

如果 mode 为 0,给定流将切换到非阻塞模式,如果为 1,它将切换到阻塞模式。这会影响从流中读取的 fgets() 和 fread() 等调用。在非阻塞模式下,fgets() 调用将始终立即返回,而在阻塞模式下,它将等待数据在流上可用。

http://php.net/manual/en/function.stream-set-blocking.php

于 2015-09-23T18:13:50.730 回答
0

看起来使用阻塞有一个技巧: http ://www.php.net/manual/en/function.stream-set-blocking.php#110755

于 2013-06-13T19:14:16.680 回答