1

SSH2を使用して、変更された Linux を実行しているデバイスへのストリームを確立しています。ストリームが確立されたら、blocking を true に設定し、出力の読み取りを開始します。「Last」という単語が表示されたら、システムがコマンドを受け入れる準備ができていることがわかったので、コマンドを送信します。次に、そのコマンドによって生成された出力を読み取ります。

これはすべて完全に機能しますが、ストリームを手動で閉じる必要があります。私はEOFまたは改行を返していないことを確信しています.これがおそらく理由ですが、これは私にとってすべて新しいことなので、間違っている可能性があります.

出力が完了したら終了しようとしています。

最初のコマンドを送信する前に探しているものは次のとおりです。

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

出力をエコーするループ。「Last」という単語を確認する必要があります。複数回表示されている場合は無視します。(ループが繰り返されていました。):

// 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 に答える