0

PHPWebページを使用して対話する必要のある計算端末プログラムがあります。getRuntime()。exec(...)を使用してJAVAでこれを実行し、プロセスとの間で読み取りと書き込みを行うパイプを作成すると、プロセスはリクエスト間に存在します。しかし、proc_openがリクエスト中にプロセスを存続させるとは思わないので、PHPで実行できるかどうかはわかりません。

これが私が作成しているウェブページの流れです。最初に、ユーザーはWebページでコマンドを入力します。このコマンドは、計算を実行するターミナルプログラムに送られ、次に回答がユーザーに返されます。ページを更新せずに回答が返されるように、リクエストにはAJAXを使用します。

今の私の問題は、新しいリクエストを開始するのではなく、次のリクエストで同じプロセスを操作する必要があるということです。これは、ターミナルプログラムに状態があるためです。つまり、このように変数を設定できます-X = 5;

したがって、私が渡すプログラムへの最初のAJAX呼び出しで

X = 5;

そして、ユーザーのブラウザに返されるプログラムからの出力は-

X = 5

次に、次のAJAXリクエストでパスします

Y = X + 5;

その後、プログラムは出力する必要があります

Y = 10

これはユーザーのブラウザに戻されます。

しかし、proc_open関数がリクエスト間の状態を維持しないことは私の理解です。サーバーがユーザーの要求に応答すると、プロセスが閉じられることを理解しています。これは正しいです?もしそうなら、PHPを使用して私がする必要があることを行う方法はありますか?

4

3 に答える 3

2

PHP セッションを使用します。ここを参照してください: http://php.net/manual/en/book.session.php

$_SESSION基本的に、サーバーはブラウザに Cookie 識別子を発行し、必要なものを何でも保持できるオブジェクト変数を作成します。ブラウザーがサーバーに Cookie を表示するたびに、サーバーは$_SESSIONそのセッションの変数を取得するため、PHP スクリプトはその変数にアクセスできます。

于 2012-05-21T20:56:06.177 に答える
1

あなたは$_SESSIONsを調べたいと思うでしょう。PHPには状態セッションを維持するという概念がないため、これがリクエスト間で情報を渡す方法です。

于 2012-05-21T20:52:40.547 に答える
1

セッションの概念を使用して値を保存するだけでは不十分で、この端末プログラムを実際に実行し続ける必要がある場合:

デーモン プログラムを作成します (php や Java など、好きなもので)。このプログラムは、ローカル ソケットで接続をリッスンし、クライアントごとにターミナル プログラムのインスタンスを維持します。あなたのphpスクリプトは、ローカルソケットでこのデーモンプログラムに接続し、IDを送信して、どの端末インスタンスが継続されているかを識別します。その後、コマンドを送信して応答を取得でき、デーモンは端末のプロキシ/マネージャーとして機能しますインスタンス。

于 2012-05-21T21:11:17.327 に答える