css*_*sss 0 php bash terminal ubuntu
我的朋友在 Ubuntu 中通过终端使用应用程序。我不确定它的名字,它是某种数学程序。他打开一个终端,输入命令来启动程序,然后终端提示符更改为他的程序的提示符,他可以输入命令,它将返回输出。
无论如何,他说他希望在网页上有一个该应用程序的界面,但他对 Web 开发知之甚少。所以,我认为有人会访问(基于 PHP 的)网站,在表单中输入一些命令并单击提交...然后服务器将启动此终端程序(更好的是,它已经运行)发送命令,获取它给出的任何输出,并将其发送回用户的浏览器。
所以我想知道这可以用 PHP 来完成吗?我可以通过 PHP 与终端中运行的某些程序交互吗?
当您在提示符下运行该程序时,它可能正在以交互模式运行。尝试运行command -h(command作为程序的名称)以查看是否存在仅接受一行输入并输出一行响应的非交互模式。
如果是这样,您可以使用简单的 POST 表单获取输入,然后使用:
echo shell_exec("command -options ".escapeshellarg($_POST['input']));
Run Code Online (Sandbox Code Playgroud)
其中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);
}
Run Code Online (Sandbox Code Playgroud)