我正在Raspberry Pi上的Apache服务器上运行PHP文档,并且希望它在单击按钮时运行文件。我在命令下放置了一些echo命令,以使文件运行,并且该文件可以打印出来,但文件无法运行。index.php文件和lightson.py和lightsoff.py文件都在同一目录( / var / www )中,我在这两个文件的顶部都添加了 #!/ usr / bin / env python ,并使它们可以通过以下方式执行:使用 chmod + x lightson.py 。如果我从外壳程序运行命令,则该命令可以工作并打开灯,就像我希望使用与文件中完全相同的命令一样,但是它不会通过该命令运行。编码:
<html> <head> <title>Light Controller</title> </head> <?php if (isset($_POST['LightON'])) { shell_exec("sudo python /var/www/lightson.py"); echo("on"); } if (isset($_POST['LightOFF'])) { shell_exec("sudo python /var/www/lightsoff.py"); echo("Off"); } ?> <form method="post"> <button name="LightON">Light ON</button> <button name="LightOFF">Light OFF</button><br><br> </form> </html>
就像你说的那样运行 apache->php->shell_exec(SUDO..)
apache->php->shell_exec(SUDO..)
因此,apache用户必须位于sudoers文件中,最好不要将sudo授予apache,而应授予apache(www- data)用户权限来运行python程序
在您的python脚本中放置第一行:#!/usr/bin/env python这样脚本便知道使用哪个程序打开它。
#!/usr/bin/env python
然后
变更组:
chgrp www-data /path/to/python-script.py
使它变得可执行
chmod +x /path/to/python-script.py
试试看
shell_exec("/path/to/python-script.py");
我希望它能起作用;)
TIPP:Documents and Strings如果您需要某种控制,并且API以nodejs和https://www.npmjs.com/package/rpi- gpio软件包开头,则Apache和PHP用于交付。这样,您将在坚实的自动化环境中占有一席之地
Documents and Strings