Выполнить Python script из Php
У меня есть PHP-страница на моем малиновом пие с двумя кнопками (вкл./выкл.)
Кнопка "Вкл." Перенаправляет на On.php
Кнопка выключения перенаправляется на Off.php
В "/usr/lib/cgi-bin" у меня есть python script, который я хотел бы выполнить (script.py)
Я могу отлично выполнить его с терминала, набрав
cd /usr/lib/cgi-bin
sudo python script.py
Он работает, если я делаю это с терминала.
Проблема заключается в файле PHP (On.php) в папке "/var/www".
Вот что я написал:
<?php
exec('cd /usr/lib/cgi-bin');
exec('sudo python script.py');
?>
Почему выполняется script с терминала, но не с моего PHP?
Ответы
Ответ 1
Вы не можете использовать sudo из PHP script. Apache работает от пользователя (общее описание www-data), поэтому отредактируйте этот файл: /etc/sudoers
Затем добавьте эту строку:
www-data ALL=(ALL) NOPASSWD:ALL
Уход! это разрешит все функции, которые вызывается PHP script, вы можете адаптировать изменение "ALL" с помощью команды script или Python.
Затем уточните своего пользователя в команде exec:
<?php
exec('sudo -u www-data python /usr/lib/cgi-bin/script.py')
Ответ 2
Попробуйте это, он должен работать:
<?php
system("cd /usr/lib/cgi-bin");
system("sudo python script.py");
?>
Или даже это:
<?php
system("cd /usr/lib/cgi-bin && sudo python script.py");
?>
Ответ 3
В более раннем дистрибутиве Raspbian вам нужно поместить файл в /var/www/file.py
. Поэтому в файле file.php вы добавляете:
{
exec("sudo python /var/www/file.py");
}
В новом Raspbian Jessie вам нужно поместить файл в /var/www/html/file.py
, поэтому в файле file.php вам нужно добавить:
{
exec("sudo python /var/www/html/file.py");
}
Или просто файл file.py
<?php
{
exec("sudo python test.py");
}
? >
Примечание. Для этого вам нужно сначала отредактировать файл, чтобы добавить эти строки, чтобы разрешить без пароля sudo
sudo nano /etc/sudoers
затем перейдите в нижнюю часть и добавьте это
pi ALL=(ALL) NOPASSWD: ALL<br>
www-data ALL=(ALL) NOPASSWD: ALL