我试图执行php脚本,但我遇到了这种错误:
Warning: file_put_contents(/sys/class/gpio/export): failed to open stream: Permission denied in /home/pi/php-gpio/src/PhpGpio/Gpio.php on line 99
Warning: file_put_contents(/sys/class/gpio/gpio17/direction): failed to open stream: Permission denied in /home/pi/php-gpio/src/PhpGpio/Gpio.php on line 103
我试图像这样在$ sudo visudo中设置权限:
www-data ALL=NOPASSWD: path/to/my/script
或
www-data ALL=NOPASSWD: ALL
但是没有用,我只能用sudo从命令行执行这个脚本!
提前致谢!
答案 0 :(得分:0)
如果您在计算机中使用,则必须更改默认目录权限:
$ sudo chmod -R +w /sys/class/gpio/export
否则,如果您在服务器,服务器面板和部分文件(例如CPanel)中运行代码,则更改权限并添加写权限。
另一种方法是运行exec()命令:
<?php
exec('chmod -R +w /sys/class/gpio/export');
?>
然而, php 应该有exec权限并且运行root!
答案 1 :(得分:0)
我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互(如果需要,可以作为root),它解决了exec()和shell_exec()的限制。在此处获取:https://github.com/merlinthemagic/MTS
下载后,您只需使用以下代码:
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1 = $shell->exeCmd('/sys/class/gpio/export');
$return2 = $shell->exeCmd('/sys/class/gpio/gpio17/direction');
//the return will be a string containing the return of the command
echo $return1;
echo $return2;
就安全性而言,它比以root身份运行apache或在你的问题中运行广泛的sudo权限要好得多。但让PHP靠近root,总是很棘手。
我构建的项目以两种方式之一实现了root bash shell:
1)你允许apache权限sudo python。
OR
2)每次需要具有root设置的shell时,都会将根凭据传递给对象。
选择你的毒药。 :)阅读文档。