从PHP运行./script.sh

时间:2014-12-09 10:05:13

标签: php bash shell mpc mpd

我有从Raspberry播放音乐的网络服务器,并使用脚本gpio.sh打开LED。 我正在使用mpd,mpc和gpio。

我的/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 / bash /var/www/gpio.sh并启用LED。 来自网络服务器&#39; mpc play&#39;工作,可以播放一首歌,但它不能运行gpio.sh。 index.php的所有者是www-data

  

-rwx ------ 1 www-data www-data 1262 Dec 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错了吗? 我无法从php执行.sh。 请帮忙。

1 个答案:

答案 0 :(得分:0)

完美的解决方案是为脚本gpio.sh设置SUID但不幸的是 只要gpio.sh是一个脚本,you can't就会这样做。

您有三种选择:

  • 您可以将脚本转换为说C ++应用程序,然后设置SUID
  • 您可以使用某些GPIO lib for python,不强制使用root,如:pigpio
  • 您可以为python解释器设置SUID,但我不确定它的好主意