【问题标题】:EXEC() in php, cec-client raspberryphp 中的 EXEC(),cec-client 覆盆子
【发布时间】:2019-01-23 17:39:38
【问题描述】:
我想通过我的 RPI 在 php 中启动一个命令。
该命令是echo 'standby 0' | cec-client -s,它在 ssh 我的电视关机时工作正常,但在 php echo shell_exec("......") 返回适配器自动检测失败......但 mkdir 也不适用于 sheel_exec,所以我认为这可能是 PATH 问题,但我不知道如何解决它。我在 ssh 中的 PATH 是 /usr/local/bin....... 而在 php 中是 /sbin:/bin:/usr/sbin:/usr/bin 。
我该如何解决它。对不起我的英语......
【问题讨论】:
标签:
php
path
exec
raspberry-pi
【解决方案1】:
我尝试了同样的方法并收到一条消息“无法打开 vchiq 实例”。我发现了一个question on Raspberry Pi StackExchange 建议将用户添加到“视频”组。我用usermod -a -G video www-data 做到了,然后用/etc/init.d/apache2 restart 重新启动了apache。然后我就可以使用 PHP 和 apache 的 cec-client 了。
【解决方案2】:
这是权限问题。通过 ssh 运行命令时,您以用户 pi 的身份执行它(可能),但通过 shell_exec,您以用户 www-data 的身份执行命令,该用户没有必要的权限。您可以通过运行 echo shell_exec("whoami"); 来检查这一点。
您可以通过在“/etc/sudoers”文件中添加行“www-data ALL=(ALL) NOPASSWD: ALL”然后运行“echo shell_exec("sudo echo 'standby 0' | sudo cec-client - s");",但是这将向用户 www-data 添加所有 sudo 权限,并且非常不安全,但它会起作用。如果您想以更安全的方式执行此操作,则需要找到 cec-client 正常运行所需的权限,然后将它们添加到用户 www-data。