【问题标题】:PHP Dbus stable implementationPHP Dbus 稳定实现
【发布时间】:2013-12-11 09:19:39
【问题描述】:

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

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

我尝试了什么:
- 未记录的 beta DBUS plugin in PECL,仍处于测试阶段,并抱怨缺少 X11 envion(这对服务器有什么好处?)。
- 还有一个没有维护的GREE php-dbus 扩展,指向文档的链接重定向到日本博客。

谢谢。

【问题讨论】:

    标签: php dbus


    【解决方案1】:

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

    作为一种解决方法,我使用了React 内置HTTP server。和你一模一样,但都在 PHP 中。您的解决方法要可靠得多。

    【讨论】:

      【解决方案2】:

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

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

      此限制是设计使然,也可能是出于安全考虑:不会有 D-bus 用户间通信!

      您可以为用户 www-data 启动一个 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 用户,调试起来相当复杂。

      【讨论】:

        猜你喜欢
        • 2017-04-21
        • 1970-01-01
        • 2013-08-30
        • 2014-08-03
        • 1970-01-01
        • 2019-04-20
        • 1970-01-01
        • 1970-01-01
        • 2011-01-09
        相关资源
        最近更新 更多