Я запускаю документ PHP на сервере Apache на моем Raspberry Pi и хочу, чтобы он запускал файл при нажатии кнопки. Я поместил некоторые команды echo в команду, чтобы файл запустился, и он распечатывается, но файл не запускается. Файл index.php и файлы lightson.py и lightsoff.py находятся в одном каталоге (/ Вар / 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 должен находиться в файле sudoers, лучше не давать sudo apache, а дать пользователю apache (www-data) право на запуск вашей программы на python
поместите первую строку в вашем скрипте 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: Apache и PHP предназначены для доставки Documents and Strings
, если вы хотите какой-то контроль и API начать с nodejs и https://www.npmjs.com/package/rpi-gpio пакет. Таким образом, у вас будет одно место для вашей надежной среды автоматизации
Это сработало для меня:
test.php
<?php
echo shell_exec("python test.py");
?>
test.py
f = open("test.txt", "a+")
f.write("hiya buddy!!\n")
f.close()
print "some output"
Вот мой актуальный ls -l
вывод из /var/www/html
:
jason@Jason-one /var/www/html $ ls -l
-rw-r--r-- 1 jason jason 44 Sep 20 18:12 test.php
-rwxr-xr-x 1 jason jason 82 Sep 20 17:44 test.py
-rw-rw-rw- 1 jason jason 38 Sep 20 18:15 test.txt
Поскольку на моем ноутбуке нет контактов GPIO, я решил записать файл в качестве теста. Обратите внимание, я не должен был использовать sudo
из-за того, как я установил права на test.py
,