如何使用PHP从web浏览器打开外部GUI应用程序?

如何使用PHP从web浏览器打开外部GUI应用程序?,php,linux,apache,qt,web-applications,Php,Linux,Apache,Qt,Web Applications,我是网络开发新手。我正在尝试使用PHP的shell\u exec()执行一个shell脚本。在脚本中,我试图调用GUI应用程序(Qt)。当我从终端执行PHP脚本时,应用程序按预期启动。但当我从浏览器中打开它时,一个空白的页面出现了 我正在使用Ubuntu和apache2服务器作为服务运行。当我在google中搜索时,类似的问题在Windows环境中通过允许apache服务与桌面交互得到了解决 PHP脚本: <?php $log = shell_exec('sh testcmd.sh');

我是网络开发新手。我正在尝试使用PHP的
shell\u exec()
执行一个shell脚本。在脚本中,我试图调用GUI应用程序(Qt)。当我从终端执行PHP脚本时,应用程序按预期启动。但当我从浏览器中打开它时,一个空白的页面出现了

我正在使用Ubuntu和apache2服务器作为服务运行。当我在google中搜索时,类似的问题在Windows环境中通过允许apache服务与桌面交互得到了解决

PHP脚本:

<?php
$log = shell_exec('sh testcmd.sh');
?>

我们将非常感谢您提供的任何帮助。

您的要求有点不清楚

如果您希望浏览某个网站时运行一个PHP脚本,该脚本将打开一个GUI应用程序供客户端进行交互,那么答案是“您不能”。原因是安装程序的工作方式是服务器和客户端在不同的机器上运行,而PHP在服务器机器上运行。因此,客户端永远看不到正在运行的程序

上述情况也适用于Windows。您在问题中引用的答案不适用于运行在与客户端不同的计算机上的服务器

无论出于何种原因,如果您想要的东西只在服务器和客户端在同一台机器上运行时才起作用(或者有人在观看服务器的显示),那么您需要执行与Windows应答相同的操作

Linux上的图形显示(假设您没有运行
wayland
)使用一个名为X11的协议。为了显示,GUI程序需要两件事。首先要知道它需要使用哪个显示器。它随一个名为
DISPLAY
的环境变量一起提供。第二个是实际使用该显示器的授权

因此,为了让您的PHP脚本运行将显示其GUI的GUI应用程序,您需要首先执行以下步骤:

  • DISPLAY
    变量设置为正确的值(从桌面环境复制)
  • 运行
    xauth add something
    ,通过在桌面环境中运行
    xauth list
    ,可以获得所需内容

  • 如果您执行这两项操作(按此顺序),您的GUI应该会显示。

    这是因为shell_exec()会向服务器而不是客户端发出命令。您缺少testcmd.sh
    #中的hashbang/bin/sh
    ,如果您在
    /Program1
    上没有具有正确权限的执行位,那么www-data可以执行它,那么它将永远不会工作。@LawrenceCherone我尝试了包括#/将bin/sh添加到脚本中,但未成功。可执行文件已获得所有权限(777)。我尝试了非GUI应用程序,它们运行良好。我认为它与$DISPLAY有关。请参考此问题&A@Pramod如果你想要的是图形用户界面,你就无法在浏览器中找回它。我在之前的评论中没有提到这一点,因为我认为这是显而易见的。是的,我的客户端和服务器运行在同一台机器上。我像你说的那样尝试了,但仍然没有成功。当我在命令末尾添加2>&1时,我在浏览器中收到了此消息。消息:
    xauth:无法生成授权文件名没有指定协议QXcbConnection:无法连接到显示:0中止(内核转储)
    那么您的apache进程可能以某种方式被隔离。如果apache和X服务器的
    /tmp
    目录不相同,则可能发生这种情况。
    ./Program1