【问题标题】:Interacting with the terminal program from php?从 php 与终端程序交互?
【发布时间】:2012-05-15 12:45:59
【问题描述】:

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

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

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

【问题讨论】:

标签: php bash ubuntu terminal


【解决方案1】:

当您在提示符下运行该程序时,它可能正在交互模式下运行。尝试运行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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2014-11-07
    • 2012-12-18
    • 2018-10-22
    • 1970-01-01
    相关资源
    最近更新 更多