【发布时间】:2012-07-04 06:53:55
【问题描述】:
我已经编写了一小部分 php 代码,可以通过命令行访问 DBus。但是当我从浏览器运行 php 代码时,dbus 部分不起作用。
我是否必须做一些事情才能从浏览器访问 DBus?
【问题讨论】:
我已经编写了一小部分 php 代码,可以通过命令行访问 DBus。但是当我从浏览器运行 php 代码时,dbus 部分不起作用。
我是否必须做一些事情才能从浏览器访问 DBus?
【问题讨论】:
通过 Web 服务器调用时,PHP 不一定使用相同的用户,因此与通过命令行调用时相比具有相同的权限。
尝试在浏览器中运行以下脚本,然后通过命令行:
<?php echo exec('whoami'); ?>
这可能会输出例如apache 当你通过浏览器运行它时,myusername 当你通过 CLI 运行它时。
因此,您需要更改您的网络服务器正在运行的用户的权限,以允许它运行 DBus 命令。具体操作方式取决于您的操作系统。
另请参阅此问题以获取更多提示: Running command-line application from PHP as specific user
【讨论】:
在 Web 服务器(如 Apache)上执行的 PHP 根本无法执行 D-Bus 请求。我尝试了几天没有成功。这是因为网络服务器用户(如www-data)无法通过session 连接访问dbus-daemon。
作为一种解决方法,我使用React 内置HTTP server 作为代理。
【讨论】: