2014-12-09 5 views
0

У меня есть веб-сервер, который воспроизводит музыку из малины и включает светодиод со сценарием gpio.sh. Я использую mpd, mpc и gpio.Запуск ./script.sh от PHP

Мой /var/www/index.php:

<html><body><?php 
echo exec('whoami'); 
if(isset($_POST['button1'])) 
{ 
    shell_exec('mpc play') 
    shell_exec('/bin/bash /var/www/gpio.sh'); 
} 
?> 
    <form method="post"> 
    <p align=center> 
    OUTPUT (AUDIO) => <button name="button1">PLAY</button> 
    </p> 
    </form> 
    </body></html> 

В терминале, я могу запустить/bin/Баш /var/www/gpio.sh успешно и светодиод включения. С веб-сервера «mpc play» РАБОТАЕТ и может играть песню, но он не может запустить этот gpio.sh. Владелец index.php является WWW-данные

1 ------ использованием rwx WWW-данных WWW-данных 1262 8 декабря 10:45 gpio.sh

--- использованием rwx --- 1 www-data www-data 272 Dec 9 09:39 index.php

Что мне делать? Когда я меняю владельца index.php или gpio.sh на root, php не может выполнить. Не правда ли, мой index.php? Я не могу выполнить .sh от php. Пожалуйста, помогите.

+0

может быть, это может помочь: http://stackoverflow.com/questions/17393265/executing-sh-scripts- с помощью PHP- –

+0

@marco Mura: Не помощь. Все еще не работает. :( –

+0

Я думаю (не уверен, хотя) shell_exec ждет, когда его команда завершится (синхронно). Таким образом, в вашем случае это может дождаться завершения вашей песни перед выполнением скрипта gpio.sh. Попробуйте поставить '&' (фон) для песни или удалить shell_exec ('mpc play'), чтобы увидеть, что gpio.sh выполняется хорошо! – sanjayk79

ответ

0

Идеальное решение для вас было бы установить SUID для скрипта gpio.sh, но, к сожалению, you can't сделать так, что gpio.sh - это сценарий.

У вас есть три варианта:

  • Вы можете превратить ваш скрипт в приложение скажет C++, а затем установить SUID
  • Вы можете использовать некоторые GPIO LIB для питона, который не заставит использование корнем, как: pigpio
  • Вы можете установить SUID для интерпретатора, но я не уверен, что его хорошая идея вообще