无法通过apache并将exec()与sudo一起使用来运行php gpio

无法通过apache并将exec()与sudo一起使用来运行php gpio,php,debian,raspberry-pi,raspbian,gpio,Php,Debian,Raspberry Pi,Raspbian,Gpio,在运行Raspbian 3.10.25的Raspberry Pi型号B-Rev2上,我按照上的说明控制管脚。但我不能让它工作。根据说明,这应该是triggerMyScript.php中的命令: exec('sudo -t /usr/bin/php ./myGpioScript'); 但是根据myGpioScript中的内容,我在Apache日志error.log中得到了一些错误,比如命令找不到和没有这样的文件或目录 我还按照指示添加了/etc/sudoers 如果我从命令行运行php trig

在运行Raspbian 3.10.25的Raspberry Pi型号B-Rev2上,我按照上的说明控制管脚。但我不能让它工作。根据说明,这应该是
triggerMyScript.php
中的命令:

exec('sudo -t /usr/bin/php ./myGpioScript');
但是根据
myGpioScript
中的内容,我在Apache日志
error.log
中得到了一些错误,比如
命令找不到
没有这样的文件或目录

我还按照指示添加了/etc/sudoers


如果我从命令行运行
php triggerMyScript.php
,它的效果非常好。

花了几个小时后,我找到了解决方案。除了php gpio上的说明之外,我还需要做以下事情:

  • myGpioScript
    中,第一行必须是
    #/usr/bin/php
    而不是
    #/usr/bin/env php
  • 我必须在
    -t
    之后添加
    php
    ,就像这样:
    exec('sudo-tphp/usr/bin/php./myGpioScript')(仔细想想,这是有道理的,但说明并不是这样说的)
  • 我不得不将它添加到sudoers文件中:
    www-data-ALL=NOPASSWD:/usr/bin/php
    ——这样www-data也可以不受限制地运行php。实际上,没有必要为实际脚本文件指定权限

对任何文件的文件权限都不相关,因此只需将其设置为较低的权限。

您缺少的主要是sudoers文件的一部分。这是能够像sudo一样运行脚本或命令的基础。如果python有此问题:pi ALL=NOPASSWD:/usr/bin/python/home/pi/scripts/python\u gpio\u scripts/script.py。我不建议您无限制地授予权限,您应该尝试只使用需要运行的脚本。