【问题标题】:How to open an external GUI application from web browser using PHP?如何使用 PHP 从 Web 浏览器打开外部 GUI 应用程序?
【发布时间】:2018-03-13 04:23:46
【问题描述】:

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

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

PHP 脚本:

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

testcmd.sh:

./Program1

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

【问题讨论】:

  • 这是因为 shell_exec() 发出一个命令让服务器而不是客户端跟随。
  • 您在 testcmd.sh #!/bin/sh 中缺少 hashbang,如果您在 ./Program1 上没有具有正确权限的执行位以便 www-data 可以执行它,它也将永远无法工作。跨度>
  • @LawrenceCherone 我尝试在脚本中包含 #!/bin/sh 但没有成功。可执行文件已获得所有权限(777)。我尝试使用非 GUI 应用程序,它们运行良好。我认为这与 $DISPLAY 有关。

标签: php linux apache qt web-applications


【解决方案1】:

有点不清楚你在问什么。

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

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

如果出于某种原因,您希望某些东西仅在服务器和客户端在同一台机器上运行时才有效(或者有人在观看服务器的显示),那么您需要执行与 Windows 答案相同的操作。

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

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

  1. DISPLAY 变量设置为正确的值(从您的桌面环境复制)。
  2. 运行xauth add something,您可以通过在桌面环境中运行xauth list 来了解某事

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

【讨论】:

  • 是的,我的客户端和服务器在同一台机器上运行。我按照你说的尝试了,但还是没有成功。
  • 当我在命令末尾添加 2>&1 时,我在浏览器中收到此消息。留言:xauth: unable to generate an authority file name No protocol specified QXcbConnection: Could not connect to display :0 Aborted (core dumped)
  • 那么您的 apache 进程可能在某种程度上是绝缘的。如果您的 apache 和 X 服务器的 /tmp 目录不同,则可能会发生这种情况。
猜你喜欢
  • 1970-01-01
  • 2014-09-02
  • 2011-03-20
  • 2014-05-29
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
相关资源
最近更新 更多