如何从PHP执行交互式命令?

Iva*_*van 4 php linux shell

我需要从PHP脚本(使用浏览器,而不是命令行)在我的桌面计算机(localhost)中执行kdiff3命令.我已经允许执行脚本的用户www-data使用visudo执行kdiff3 .事实上,如果我以www-data身份登录,我可以毫无问题地执行它(sudo kdiff3 ...,它被配置为根本不需要密码).

问题是当我尝试从PHP脚本执行此命令时.我试过这个:

$output = shell_exec("sudo kdiff3 -m $file.def.old $file $file.def -o $file");
Run Code Online (Sandbox Code Playgroud)

没有任何反应(输出为NULL).如果我尝试非交互式命令,就像ls一样:

$output = shell_exec("ls");
Run Code Online (Sandbox Code Playgroud)

发生了什么?为什么不能执行交互式命令?

Fra*_*Luz 10

尝试passthru($cmd);

它将允许终端屏幕上的用户I/O.


Bas*_*tch 1

kdiff3是一个交互式图形用户界面程序,因此它使用 KDE 和 Qt,并且需要X11服务器。

在 Web 服务器中(即PHP运行 forApacheLighttpd),您没有任何 X11 服务器。

因此无法kdiff3从 PHP 脚本内部使用(除非 Web 服务器运行在桌面 Linux 计算机上;然后您需要适当设置环境,特别DISPLAY是可能的XAUTHORITY环境变量)。但是,您可以运行像...这样的命令行程序diff3(使用popen技巧)。