从php与终端程序交互?

时间:2012-05-06 22:26:41

标签: php bash ubuntu terminal

我的朋友通过Ubuntu中的终端使用应用程序。我不确定它的名称,它的某种数学程序。他打开一个终端,输入命令来启动程序,然后终端提示改变为他的程序提示,他可以输入命令,它会给他回输出。

无论如何,他说他希望在网页上有这个应用程序的界面,但他对网络开发知之甚少。所以,我看到它的方式是有人会去(基于PHP)的网站,在表单中输入一些命令并单击提交...然后服务器将启动此终端程序(更好的是,让它已经运行)发送它的命令,获取它给出的任何输出,并将其发送回用户的浏览器。

所以我想知道这可以用PHP完成吗?我可以通过PHP与终端中运行的某些程序进行交互吗?

1 个答案:

答案 0 :(得分: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);
}