0

私の友人は、Ubuntu の端末を介してアプリケーションを使用しています。名前はわかりませんが、ある種の数学プログラムです。ターミナルを開き、コマンドを入力してプログラムを起動すると、ターミナル プロンプトがプログラムのプロンプトに変わり、コマンドを入力できるようになり、出力が返されます。

とにかく、彼は Web ページ上にこのアプリケーションへのインターフェースを持ちたいと言っていましたが、彼は Web 開発についてほとんど知りません。したがって、誰かが (PHP ベースの) Web サイトにアクセスし、フォームにいくつかのコマンドを入力して [送信] をクリックすると、サーバーがこのターミナル プログラムを起動します (できれば、既に実行しているほうがよいでしょう)。コマンドを実行し、出力を取得して、それをユーザーのブラウザに送り返します。

だから私はこれがPHPでできるのだろうか?PHP を介して端末で実行されているプログラムと対話できますか?

4

1 に答える 1

4

プロンプトでプログラムを実行すると、プログラムはおそらく対話モードで実行されます。command -h(プログラムの名前です)を実行commandして、入力行を受け入れ、応答として単一行を出力する非対話モードがあるかどうかを確認してください。

その場合は、単純な POST フォームで入力を取得してから、次を使用できます。

echo shell_exec("command -options ".escapeshellarg($_POST['input']));

commandはプログラム名、-optionsは非対話モードで実行するために必要なオプション、は$_POST['input']フォーム変数です。


または、プログラムが非対話モードをサポートしていない場合はproc_open、関連する関数を使用する必要があります。これらの行に沿ったもの:

if( $process = proc_open(
    "command",
    Array(
        Array("pipe","r"),
        Array("pipe","w"),
        Array("file","errors.log")
    ),
    $pipes
)) {
    fwrite($pipes[0],$_POST['input']);
    fclose($pipes[0]);
    echo stream_get_contents($pipes[1]);
    fclose($pipes[1]);
    proc_close($process);
}
于 2012-05-06T22:43:26.057 に答える