Выполнение скрипта 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