Intereting Posts
Что более эффективно и почему: одно соединение db на страницу или одно соединение db для каждой функции? Как записывать голосовые файлы с помощью PHP, FLASH Получение данных с веб-сайта cURL после входа в систему? Компилятор Google Closure и данные о multipart / form-data не работают function.session-start отображается на странице входа в действие с другими правильными ссылками, почему так и как проверить сеанс для входа в действие-форму Игла в стоге сена с массивом в PHP Imagick: UnableToLoadModule Подпись Amazon S3 не работает с SDK Умышленно медленная загрузка страницы HTML / PHP для тестирования Проблема кодирования UTF-8 в php, специальные символы file_get_contents загрузка большого файла Как динамически генерировать ключ клиента openvpn с помощью php и передавать переменные команде shell? Должны ли закрываться соединения SQL, открытые с PDO в PHP? Как вывести значение для каждого третьего результата инструкции foreach в php? Почему тело ответа HTTP содержит «2fb» в начале?

Выполнить скрипт Python из Php

У меня есть веб-страница 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