我正在尝试从 PHP 程序连接到 DBus。
当我从命令行运行该程序时,它可以工作,但是当它由 Apache 网络服务器(以用户 apache
身份运行)运行时,它无法连接到总线。
我尝试了使用 system
调用 qdbus
和使用 python-dbus 调用 Python 脚本,但是这两种方式都不起作用。另外,我无法编译 this PHP extension ,但我认为这不会解决我的问题。
我认为问题在于提供 session 总线的 DBus 守护程序以我的用户身份运行(系统总线一以 messagebus
身份运行),但 PHP 以 apache.
如何连接到其他用户的总线?
(This 对我不起作用。)
最佳答案
首先,您是否有尝试调用的 dbus 方法? Dbus 只是传输层,您需要一个托管 dbus 方法的程序和一个调用 dbus 方法的程序。我假设您有一个要从 php 程序调用的 dbus 方法。
apache 如何尝试调用您的 dbus 方法?如果您使用 system() 方法或来自 php 的类似方法来调用 qdbus,那将会失败。 PHP 由 apache 运行,apache 没有像您的用户那样的自动登录 dbus 进程,也没有 X11 访问权限。这意味着为了让你的 apache 有 dbus,你必须使用:
eval 'dbus-launch --auto-syntax' [command]
当使用 PHP 的 system() 时。但这不是最佳选择。
一些解决方案是:
https://stackoverflow.com/questions/12123668/