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