У меня есть веб-страница PHP на моем малиновом пие с двумя кнопками (вкл. И выкл.) Кнопка включения кнопки перенаправляется на On.php Кнопка выключения перенаправляется на Off.php В «/ usr / lib / cgi-bin» у меня есть сценарий python что я хотел бы выполнить (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'); ?>
Почему скрипт выполняется с терминала, но не с моего PHP?
Вы не можете использовать sudo из PHP-скрипта. Apache работает от пользователя (общее описание www-data), поэтому отредактируйте этот файл: /etc/sudoers
Затем добавьте эту строку:
www-data ALL=(ALL) NOPASSWD:ALL
Забота ! это позволит авторизовать все функции, которые будут вызываться с помощью PHP-скрипта, вы можете адаптировать изменение «ALL» вашим скриптом или командой 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
. Поэтому в файле 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