人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ストリーム(?)を最後まで読み込みたいのですが、うまく出来ません。

下記のように、終端まで読み込もうとするとループしてしまうようです(とにかく動かなくなります)。

$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);

よろしくお願いします。

●質問者: rapuntuleru
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:24 print ストリーム ループ
○ 状態 :終了
└ 回答数 : 2/3件

▽最新の回答へ

1 ● pahoo
●35ポイント

ブロックモードに入っているので、fgetsはVT100からの終了条件を判断できず、無限ループに陥っていると思われます。

何らかの終了条件を設定してやる必要があります。

◎質問者からの返答

回答ありがとうございます。

ストリームのブロックモードと非ブロックモードの違いがよく分かってないので、また別に質問させていただくかもしれません。


2 ● kn1967
●35ポイント ベストアンサー

fgets は ファイル終端コード(EOF:1A)で区切りを付けますが

VT-100 の場合は 伝送終了コード(EOT:04) で区切りを付けるため

fgets が延々と続きを待ち続けているのではないかと思われます。


php5 から実装された stream-get-line であればコードを自分で設定できますので

下記のようにしてみてはいかがでしょう。

while($line3 = stream-get-line($stream1, "\x04")){

PHP: stream_get_line - Manual

◎質問者からの返答

コメントありがとうございます。

勉強しつつ、やってみます。

別質問については、回答がついていませんでしたので、とりあえず削除しました(また、似たような質問を出させていただくかもしれまんせんが)。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ