我正在尝试通过PHP运行‘lightled.py’(按钮RON)和‘lightledoff.py’(按钮ROFF)。这两个程序都包含GPIO库,都需要root访问权限。按钮' on‘和' off’直接打开和关闭led。按钮开和关工作正常,但RON和RON不能。我如何运行需要根访问权限的python或c++程序?
<!doctype html>
<html>
<head>
<title>LED Test</title>
<meta charset="UTF-8"/>
</head>
<body>
<h1>Light Led</h1>
<form method=GET action="index.php">
<h3>Radio Led</h3>
<input name="button" type="submit" value="RON">
<input name="button" type="submit" value="ROFF">
<h3>On Board Led for Test</h3>
<input name="button" type="submit" value="ON">
<input name="button" type="submit" value="OFF">
</form>
<?php
if ($_GET["button"] == "RON") {
system("echo raspberry | sudo -S python ./lightled.py");
};
if ($_GET["button"] == "ROFF") {
system("echo raspberry | sudo -S python ./lightledoff.py");
};
if ($_GET["button"] == "ON") {
system("gpio -g mode 17 out");
system("gpio -g write 17 1");
};
if ($_GET["button"] == "OFF") {
system("gpio -g mode 17 out");
system("gpio -g write 17 0");
};
?>
</body>
</html>发布于 2016-05-04 20:29:42
您要做的是从没有权限的用户运行sudo命令,即使在以root用户身份运行PHP框架时,sudo也不会将创建的用户(框架用户)提升为root权限。
您必须将运行PHP脚本的框架添加到sudoers文件中,并且应该能够以root用户身份通过sudo命令执行这些文件,就像您已经尝试过的那样。为此,您需要以root用户身份运行命令visudo,并为用户添加一个条目,如下所示:
# User Privilege Specification
root ALL=(ALL) ALL
PHPFramework ALL=(ALL) ALL如果你不想给PHP框架所有的根权限(我推荐它,即使它只是在本地运行的一个小RPi ),你将不得不更具体地编辑sudo文件,以阅读主题谷歌'visudo priveleges',这是我发现的第一个命中之一:https://www.garron.me/en/linux/visudo-command-sudoers-file-sudo-default-editor.html
下面是一个通过sudo授予运行python脚本的权限的示例:
# User Privilege Specification
PHPFramework ALL=/path/to/file/lightled.py; /path/to/python_install其中PHPFramework是您的部署方法的名称,对于apache,这将是'apache‘(没有qoutes)。
发布于 2016-05-18 19:14:59
‘’我最近发布了一个项目,它允许PHP获取一个真正的Bash shell并与之交互。
下载后,您只需使用以下代码:
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
//insert command
$strCmd = 'echo raspberry | sudo -S python ./lightled.py';
$return = $shell->exeCmd($strCmd);
//handle any return and issue next command into the shellhttps://stackoverflow.com/questions/37027587
复制相似问题