我在Raspberry Pi上的Apache服务器上运行PHP文档,我希望它在单击按钮时运行文件。我在命令下放了一些echo命令来使文件运行并打印出来,但文件没有运行。 index.php文件和lightson.py以及lightsoff.py文件都在同一目录下( / var / www ),我添加了#!/ usr / bin / env python < / b>到两个文件的顶部,并使用 chmod + x lightson.py 使它们可执行。如果我从shell运行命令它可以正常工作并使用与文件中完全相同的命令打开灯,但它不会运行命令。代码:
<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>
答案 0 :(得分:2)
正如您所说,您正在运行apache->php->shell_exec(SUDO..)
所以apache用户必须在sudoers文件中,最好不要给apache sudo而不是给apache(www-data)用户权限来运行你的python程序
在你的python脚本中放置第一行:#!/usr/bin/env python
所以脚本知道用它打开它的程序..
然后
更改组:
chgrp www-data /path/to/python-script.py
make it executabel
chmod +x /path/to/python-script.py
试试吧
shell_exec("/path/to/python-script.py");
我希望它有效;)
TIPP:Apache和PHP用于提供Documents and Strings
,如果你想要某种控制和API启动nodejs和https://www.npmjs.com/package/rpi-gpio包。通过这种方式,您将拥有一个可用于实体自动化环境的场所