2012-05-06 7 views
0

私の友人は、Ubuntuの端末からアプリケーションを使用しています。私はその名前、数種類の数学プログラムについては分かりません。彼はターミナルを開き、コマンドを入力してプログラムを開始し、ターミナルプロンプトがプログラムのプロンプトに変わり、コマンドを入力することができます。phpのターミナルプログラムと対話しますか?

とにかく、彼はウェブページ上にこのアプリケーションへのインターフェースを持ちたいと言っていたが、ウェブ開発についてはほとんど知りませんでした。だから、誰かが(PHPベースの)ウェブサイトに行き、フォームにいくつかのコマンドを入力してsubmitをクリックすると、サーバはこの端末プログラムを起動するでしょう。それに対するコマンドは、それが与えるどんな出力を得て、それをユーザーのブラウザに送り返します。

これはPHPで行うことができますか? PHPを介して端末で動作するプログラムと対話できますか?

+1

['exec'](http://php.net/manual/en/function.exec.php)を見てください。 – bfavaretto

+1

できます。それを安全に行うことは別の問題です。ユーザの入力を受け取り、exec()の外部プログラムに渡すことは、あなたが何をしているのか分からない限り、危険です。 –

+1

@csssはこのhttp://php.net/manual/es/function.shell-exec.phpを見ていますが、Marcは注意してください。 – ant

答えて

3

プロンプトでプログラムを実行すると、プログラムが対話モードで動作している可能性があります。 command -hcommandがプログラムの名前である)を実行して、入力行を受け取り、応答して1行だけを出力する非対話モードが存在するかどうかを確認してください。

もしそうなら、あなたは簡単な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); 
} 
関連する問題