从PHP运行脚本时,RPi GPIO控件丢失(没有任何错误) - php

我一直在创建一个小程序,它将允许我通过Python控制GPIO引脚。这一切进展顺利。当我尝试从PHP调用此python脚本时,会发生问题。似乎失去了控制GPIO引脚的功能,并且无提示地崩溃而没有任何错误。

存在以下文件:

$$$。py-失去烫发的主要文件
configCreator.py-生成一个config.ini文件,
0.009.py文件使用

config.ini-已生成的配置
install.py-安装apache2和php并生成一个链接到RRR.py文件的网页。
index.php-仅包含表单的简单页面
control.php-文件使用GET检索变量并构建执行命令。

当运行python3 RRR.py -c ON -r 5的示例命令时,它将正确地控制第5个设备映射的引脚。

我可以通过放置以下URL-> 192.168.x.x/control.php?com=ON&dev=5来获得相同的命令
PHP回显向我显示$command变量包含以下python3 RRR.py -c ON -r 5

我使用PHP使用以下命令执行此命令-> $output = shell_exec($command);
然后使用-> echo "<pre>$output</pre>"查看输出

我得到以下输出:

Sending command (ON) to device (5)
Performing operation. This will take 1 second(s)...
Please wait...

这是当可以从RRR.py文件中的以下几行控制GPIO引脚时:

 GPIO.setup(devPin, GPIO.OUT)
 GPIO.output(devPin, GPIO.LOW)
 time.sleep(sleepTime)
 GPIO.output(devPin, GPIO.HIGH)

其中devPin是从config.ini算出的GPIO引脚号。不用担心这部分,它工作正常。从PHP运行时,引脚号仍然正确。 GPIO命令根本不起作用。

这使我相信问题完全出在文件的第一行,但是,不会产生任何错误。第一行是:

import RPi.GPIO as GPIO

也许PHP的shell_exec没有使用GPi.GPIO python模块的正确权限?有人知道我该如何解决吗?对于所有建议,我将不胜感激。我真的很想让这个项目开始工作:)

tl; dr:一切在命令行上都可以正常运行,但是当从PHP调用完全相同的命令时,它完全中断。

参考方案

根据Access GPIO pins without root. No access to /dev/mem. Try running as root!,您的python脚本将写入/dev/gpiomem

这是行不通的,因为不允许运行您的python脚本(www-data)的用户写入此设备:

要在此写入,您需要是root或在gpio组中。
用户www-data既不是root也不在gpio组中。

为了访问gpio端口,您需要将www-data用户放在正确的组中:

sudo usermod -aG gpio www-data

不要忘记重启您的http服务器(和php-fpm(如果适用))。否则您将不会发现任何差异。

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP-如何获取类的成员函数列表? - php

如果我知道班级的名字。有没有办法知道类的成员函数列表? 参考方案 get_class_methods()是你的朋友

PHP-我们应在会话中包含哪些数据? - php

这是一个初学者的问题...在网站中,会话中应该包含或不应该包含什么类型的数据?我了解我不应该包含任何需要保持安全的信息。我对编程最佳实践更感兴趣。例如,有可能在会话中包括一些数据,否则这些数据将作为依赖项注入从一个页面发送到另一个页面。这不等于创建全局变量吗?一般来说,哪种数据在会话表中已经存在或没有?谢谢,JDelage 参考方案 您应该将会话视为一次写入…

php ziparchive类源代码 - php

Improve this question 我如何获取ziparchive类本身的源代码。 参考方案 假设您在谈论PHP ZipArchive class:下载PHP source code并查找适当的文件。如果您希望源代码是PHP代码,您可能会感到失望,因为源代码是用C语言编写的。或者,也可以在PHP Github Development Reposito…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…