0

システムのいくつかの機能を自動化する必要がありますが、残念ながら API はなく、telnet コマンドしかありません。

それで、私はこれを見つけました: http://www.geckotribe.com/php-telnet/これは基本的に PHP の Telnet クラスです。

ログインしようとするのが速すぎるため、最初は奇妙な問題が発生したため、接続とユーザー名とパスワードの入力の間に余分な sleep(2) を追加しました。

問題は次のとおりです。1行のみを出力する1つのコマンドを実行した後、次のコマンド(複数行の出力)でシステムが2分15秒(Eclipseデバッグモードで)ハングアップするようです。ブラウザのロードで最小20秒(タイムアウト設定を180秒に強制した後のみ...)。

それが発生する行は次のとおりです。 $r.=fread($this->fp,1000); クラスの DoCommand() 関数で。

これは、実行しようとしているスクリプトへのペーストビン リンクと、最終的に得られる出力です (情報を保護するための変更が加えられています..)

コード: http://pastebin.com/TXEHWa05

出力: http://pastebin.com/mVFm5HM2

この原因をデバッグする方法はありますか? これまでのところ、プロジェクトでデバッガーさえ必要としたことはありません:(理想的には、telnetで最大5秒で2〜3個のコマンドの実行を終了したいと思います..それ以上ではありません.(これを理解したら、機能を追加します)ユーザーを切断するなど)。

fsockopen を使用したこの種の PHP の使用に慣れている人が助けてくれることを願っています :)

4

1 に答える 1

1

この呼び出しが呼び出すループは、すべてのデータを受信するまで、一度に 1000 バイトのデータを読み取ります。socket_get_status 呼び出しが常に「unread_bytes」の値を返している可能性があり、これは強制タイムアウトが呼び出されるまでループします。相手側のサービスがかなり大きな応答を返している可能性があります。この場合、適切な数が見つかるまで、ハングアップするたびに読み取りバイト長を 1000 ずつ増やすことができます。また、毎回 fread と socket_get_status の結果を var_dump() して少しデバッグし、どこでハングアップしているかを確認します。

于 2010-11-25T18:34:09.137 に答える