2012-05-06 17 views
0

我的朋友在Ubuntu中通過終端使用應用程序。我不確定它的名字,它的某種數學程序。他打開一個終端,鍵入命令啓動程序,然後終端提示符變爲他的程序提示符,他可以輸入命令,它會讓他返回輸出。與來自php的終端程序交互?

無論如何,他說他想在網頁上有這個應用程序的界面,但他對網頁開發知之甚少。所以,我看到的方式是有人會去(基於PHP的)網站,在表單中輸入一些命令並點擊提交...然後服務器將啓動這個終端程序(更好的是,它已經運行)發送對它的命令,獲得它給出的任何輸出,並將其發回給用戶的瀏覽器。

所以我想知道這可以用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是該程序的名稱)以查看是否存在非交互式模式,該模式僅接受一行輸入並輸出單行響應。

如果是的話,你可以用一個簡單的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); 
}