下記のように、終端まで読み込もうとするとループしてしまうようです(とにかく動かなくなります)。
$stream1 = ssh2_shell($connection, 'vt100', null, 80, 24, SSH2_TERM_UNIT_CHARS);
stream_set_blocking($stream1,true);
while($line3 = fgets($stream1)){
print($line3);
}
下記のように、1行だけなら読み込めます。
$line = fgets($stream1);
print($line);
よろしくお願いします。
fgets は ファイル終端コード(EOF:1A)で区切りを付けますが
VT-100 の場合は 伝送終了コード(EOT:04) で区切りを付けるため
fgets が延々と続きを待ち続けているのではないかと思われます。
php5 から実装された stream-get-line であればコードを自分で設定できますので
下記のようにしてみてはいかがでしょう。
while($line3 = stream-get-line($stream1, "\x04")){
ブロックモードに入っているので、fgetsはVT100からの終了条件を判断できず、無限ループに陥っていると思われます。
何らかの終了条件を設定してやる必要があります。
回答ありがとうございます。
ストリームのブロックモードと非ブロックモードの違いがよく分かってないので、また別に質問させていただくかもしれません。
fgets は ファイル終端コード(EOF:1A)で区切りを付けますが
VT-100 の場合は 伝送終了コード(EOT:04) で区切りを付けるため
fgets が延々と続きを待ち続けているのではないかと思われます。
php5 から実装された stream-get-line であればコードを自分で設定できますので
下記のようにしてみてはいかがでしょう。
while($line3 = stream-get-line($stream1, "\x04")){
コメントありがとうございます。
勉強しつつ、やってみます。
別質問については、回答がついていませんでしたので、とりあえず削除しました(また、似たような質問を出させていただくかもしれまんせんが)。
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | ![]() |
35回 | 34回 | 6回 | 2009-06-13 23:47:06 |
コメントありがとうございます。
勉強しつつ、やってみます。
別質問については、回答がついていませんでしたので、とりあえず削除しました(また、似たような質問を出させていただくかもしれまんせんが)。