PHP Dbus稳定实现

时间:2013-11-26 09:51:51

标签: php dbus

我的情况:
    我有一个由在后台运行的一些编译的C ++守护进程组成的软件,一个PHP / JS Web界面和一个用Python编写的CLI界面。目前,要从PHP(Web界面)向守护进程发送Dbus命令,我们使用python脚本代理调用,因为python具有非常成熟的Dbus实现。

我的问题:
有没有稳定的Dbus实现可以与PHP一起使用,与Ubuntu Server / CentOs兼容?

我尝试了什么:
  - 未记录的测试版DBUS plugin in PECL仍处于测试阶段,并抱怨缺少X11环境(这对服务器有何影响?)。
  - 然后有GREE php-dbus扩展未维护,链接到文档重定向到日本博客。

谢谢。

2 个答案:

答案 0 :(得分:1)

在Web服务器(如Apache)上执行的PHP根本无法执行D-Bus请求。我试了好几天没有成功。这是因为网络服务器用户(如www-data)无法通过dbus-daemon联系人访问session

作为一种解决方法,我使用React内置HTTP server。完全像你,但都在PHP中。您的解决方法更加可靠。

答案 1 :(得分:0)

好吧,在Apache下执行的PHP 可以做到 D-Bus请求!

问题是D-Bus请求仅限于一个用户,也就是说,例如www-data用户可以向www-data拥有的进程发出请求,而不能向其他用户发出请求。

此限制是设计使然,并且可能还出于安全性的考虑:将不存在D-bus用户间通信!

您可以为用户www数据启动D-Bus服务器,例如

> sudo -u www-data sh -c "export DBUS_SESSION_BUS_ADDRESS=unix:path=/tmp/dbus-www-data &&  dbus-daemon --fork --session --print-address 1 --address='unix:path=/tmp/dbus-www-data'"

或类似。如果可行,您应该在/ tmp中看到类似

的管道
srwxrwxrwx 1 www-data www-data    0 Aug  1 09:15 dbus-www-data=

由于www-data无法直接登录(没有sudo www-data),因此您需要在shell命令(-c)中执行,导出D-Bus会话地址(会话套接字/数据位于/ tmp / dbus- www-data,将在通话期间创建该数据),然后使用此D-bus地址启动dbus守护程序。

这在我的Apache2 / PHP / C ++设置中有效,但是由于使用了www-data用户,调试起来相当复杂。