PHP Dbus稳定实现

PHP Dbus稳定实现,php,dbus,Php,Dbus,我的处境: 我有一个软件,由一些编译的C++后台程序运行在后台,PHP/JS Web界面和用Python编写的CLI接口。目前,为了从PHP(web界面)向守护进程发送Dbus命令,我们使用python脚本代理调用,因为python有一个非常成熟的Dbus实现 我的问题: 有没有稳定的Dbus实现可以与PHP一起使用,与Ubuntu服务器/CentOs兼容 我试过什么: -未记录的测试版,仍在测试版中,并抱怨缺少X11 envion(这对服务器有什么好处?。 -还有一个没有维护的扩展,指向文档的

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

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

我试过什么:
-未记录的测试版,仍在测试版中,并抱怨缺少X11 envion(这对服务器有什么好处?。
-还有一个没有维护的扩展,指向文档的链接重定向到一个日本博客


谢谢。

在web服务器(如Apache)上执行的PHP根本无法执行D-Bus请求。我尝试了好几天都没有成功。这是因为web服务器用户(如
www-data
)无法通过
会话
连接访问
dbus守护进程


作为解决方法,我使用内置的。和你完全一样,但都是用PHP编写的。您的解决方案更加可靠。

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

问题是,D-Bus请求仅限于单个用户,比如说www数据用户可以请求www数据拥有的进程,但不能请求其他用户

这种限制是设计上的,也可能是由于安全性:不会有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数据无法直接登录(没有sudo www数据),因此需要在shell命令(-c)中执行,导出D-Bus会话地址(位于/tmp/dbus www数据中的会话套接字/数据,调用期间将创建该地址),然后使用该D-Bus地址启动dbus守护进程

这在我的Apache2/PHP/C++设置中起作用,但由于使用了www数据用户,调试起来相当复杂