raspberry pi: 无法从 PHP 执行 script.py
raspberry pi: Can't execute script.py from PHP
更新:
根据评论中的建议,我找到了我的 error.log (/var/log/apache2/error.log):
Traceback (most recent call last):
File "/var/www/html/nano.py", line 7, in <module>
GPIO.setup(17,GPIO.OUT)
RuntimeError: No access to /dev/mem. Try running as root!
我通过添加 sudo 解决了我的问题:
<?php
echo exec("sudo /usr/bin/python /var/www/html/nano.py");
?>
但是我还是不明白。
当我从我的网络服务器调用 nano.py 时,我需要 运行 它作为 sudo,但是当我从我的终端(作为 pi 用户)调用 运行 nano.py 时,我不必运行 它作为 sudo。
我以为我在编辑 sudoers 时给了 apache root 访问权限。
谁能解释一下?
这安全吗? (我的 apache 服务器目前只能通过我自己的 wifi 网络访问)
我知道这个问题已被多次询问和回答,但我已经尝试了我能找到的所有解决方案,但我仍然无法从我的 PHP 网页执行我的 script.py。
我可以从终端执行我的 nano.py 脚本:
我的 apache 服务器也工作正常(我可以根据需要显示文本)
nano.py 脚本:
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17,GPIO.OUT)
print "LED on"
GPIO.output(17,GPIO.HIGH)
time.sleep(1)
print "LED off"
GPIO.output(17,GPIO.LOW)
我有一个名为 nano.py 的 python 脚本位于:
/var/www/html/nano.py (-rwxrwxrwx 1 pi www-data 236 Jan 26 13:12 nano.py)
和
/home/pi/nano.py (-rwxr-xr-x 1 pi pi 225 1 月 26 13:19 nano.py)
脚本都是一样的:
<?php
echo shell_exec("python /var/www/html/nano.py");
?>
我尝试了很多东西,但我无法从我的 PHP 页面执行 nano.py:
- 尝试了不同的路径(/var/www/html/nano.py /home/pi/nano.py nano.py)
- 尝试过 shell_exec,执行
- 尝试了不同的 python 路径 (python /usr/bin/python)
我尝试授予 apache sudo 访问权限:
www-data ALL=(ALL) NOPASSWD:ALL
我真的不知道我还有什么其他选择,
所以我希望有人能帮助我。
尝试
<?php
echo shell_exec("/usr/bin/python /var/www/html/nano.py");
?>
很可能找不到您的 python 二进制文件。还要确保这些功能未被您的 php.ini.
阻止
如果这不起作用,/var/log/apache2/error.log 可以告诉您有关错误的更多信息。
tomcat 服务器很可能 运行 在 "tomcat" 用户帐户下。这可能就是您需要 sudo 命令的原因。
更新:
根据评论中的建议,我找到了我的 error.log (/var/log/apache2/error.log):
Traceback (most recent call last):
File "/var/www/html/nano.py", line 7, in <module>
GPIO.setup(17,GPIO.OUT)
RuntimeError: No access to /dev/mem. Try running as root!
我通过添加 sudo 解决了我的问题:
<?php
echo exec("sudo /usr/bin/python /var/www/html/nano.py");
?>
但是我还是不明白。 当我从我的网络服务器调用 nano.py 时,我需要 运行 它作为 sudo,但是当我从我的终端(作为 pi 用户)调用 运行 nano.py 时,我不必运行 它作为 sudo。 我以为我在编辑 sudoers 时给了 apache root 访问权限。
谁能解释一下? 这安全吗? (我的 apache 服务器目前只能通过我自己的 wifi 网络访问)
我知道这个问题已被多次询问和回答,但我已经尝试了我能找到的所有解决方案,但我仍然无法从我的 PHP 网页执行我的 script.py。
我可以从终端执行我的 nano.py 脚本:
我的 apache 服务器也工作正常(我可以根据需要显示文本)
nano.py 脚本:
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17,GPIO.OUT)
print "LED on"
GPIO.output(17,GPIO.HIGH)
time.sleep(1)
print "LED off"
GPIO.output(17,GPIO.LOW)
我有一个名为 nano.py 的 python 脚本位于: /var/www/html/nano.py (-rwxrwxrwx 1 pi www-data 236 Jan 26 13:12 nano.py) 和 /home/pi/nano.py (-rwxr-xr-x 1 pi pi 225 1 月 26 13:19 nano.py) 脚本都是一样的:
<?php
echo shell_exec("python /var/www/html/nano.py");
?>
我尝试了很多东西,但我无法从我的 PHP 页面执行 nano.py:
- 尝试了不同的路径(/var/www/html/nano.py /home/pi/nano.py nano.py)
- 尝试过 shell_exec,执行
- 尝试了不同的 python 路径 (python /usr/bin/python)
我尝试授予 apache sudo 访问权限:
www-data ALL=(ALL) NOPASSWD:ALL
我真的不知道我还有什么其他选择, 所以我希望有人能帮助我。
尝试
<?php
echo shell_exec("/usr/bin/python /var/www/html/nano.py");
?>
很可能找不到您的 python 二进制文件。还要确保这些功能未被您的 php.ini.
阻止如果这不起作用,/var/log/apache2/error.log 可以告诉您有关错误的更多信息。
tomcat 服务器很可能 运行 在 "tomcat" 用户帐户下。这可能就是您需要 sudo 命令的原因。