LAMP Web服务器:在服务器端执行应用程序无法检测USB设备

时间:2013-07-31 20:36:02

标签: php lamp

我已经设置了LAMP Web服务器,当客户端点击服务器Web界面上的按钮时,我希望在服务器端运行应用程序。此应用程序将按序列号查找某个USB设备,将其打开并向设备发送一个字节数据包。

我有一个index.html,它只有一个按钮,可以调用我的test.php文件,该文件使用shell_exec()来调用我的应用程序。

当通过Web界面调用应用程序时,应用程序会写出错误,指示它无法打开USB设备(这是此应用程序的内置错误,因此应用程序正常工作,它无法找到usb设备)。

但是当我通过终端调用应用程序时,应用程序找到usb设备并写入它没有问题。

我正在寻找一些建议!我正在做什么才是可行的?如果是这样,如何通过Web界面调用应用程序来查找USB设备?我觉得它与权限有关,你永远不知道。

test.php:

<?php echo shell_exec("/home/pi/FDTI_test/FDTI_test_application"); ?>

注意: USB设备已连接,与其驱动程序配合使用,并通过USB连接到服务器。

应用程序在通过服务器端的终端调用时有效,但在通过Web界面调用时则无效。

1 个答案:

答案 0 :(得分:1)

我认为你在正确的轨道上是一个权限问题。

在典型的LAMP堆栈中,php进程在apache进程中作为模块运行,除非您以不同方式配置它。在我选择的服务器操作系统中,php进程默认以用户'www-data'运行。

最简单的解决方案可能是为您的网络用户帐户授予sudo权限,并将sudoers文件设置为NOPASSWD。这是非常不安全的,所以只在极少数情况下这样做。

<?php echo shell_exec("sudo /home/pi/FDTI_test/FDTI_test_application"); ?>

下一个最简单的选项是授予Web用户帐户直接写入USB设备的权限。根据您的发行版,您可能只需要add the user到'adm'组。

sudo usermod -a -G adm www-data 

同样,这可能不是最安全的方法,但比第一个选项更安全。

最后,您可以查看最难的解决方案,即安装修补版本的apache,允许suexec。这与第二种选择一样不安全,但实施起来要困难得多。 (我会包含指向教程的链接,但我只限于2个链接,因为这是我的第一个答案。)

希望这有帮助!