无法从PHP执行Python脚本

4

已解决

在撰写新问题之前,我会在整个网络上寻找解决方案。我有一个具有apache2、php5.4和ssl的树莓派。我想从php中执行一个python脚本。php脚本位于/var/www中,该目录具有777权限。

shell_exec('python /home/pi/Desktop/Python/prova.py');

Prova.py的权限为750,但其组所有者是www-data,这是由shell_exec('whoami')打印的用户,可以正常工作。

print "Hello World"

脚本可以直接在命令行中运行:
php filename.php

浏览器中无法工作!

最终我成功地从浏览器执行了脚本。 我必须将www-data用户添加到sudoers文件并赋予相关权限:

www-data ALL=(ALL) NOPASSWD: /etc/bin/python 

1
Prova.py != prova.py,请检查你的Python脚本的真实名称。你是否收到了错误消息(请检查服务器日志)?此外,www-data需要有访问/home/pi/Desktop/Python/的权限。 - mata
2个回答

4
您的问题是这样的: 通过控制台启动php脚本时,您使用当前用户的权限启动php。 当通过在浏览器中打开进程执行时,它将具有Web服务器进程用户的权限。
无论如何,您的组权限必须为7。要么将python脚本权限更改为777(每个人都可以读写和执行),要么将其更改为770并确保您的Web服务器用户在设置为文件的组中。

我试图将prova.py移动到var / www的子目录中,现在...不幸的是它有效了! - Luca
我试图通过编写一个复杂的Python脚本来播放声音。因此,我导入了time和pygame库,但问题仍然存在。它可以在命令行中工作,但无法通过浏览器运行。 - Luca
文件当前设置了哪些权限? - Tim Bodeit

-2
我在尝试构建一个用于更改inky pHAT上的图像的Web界面时遇到了类似的问题。结果发现www-data没有访问GPIO.OUT的权限。通过运行“sudo -u www-data php index.php”进行测试,返回了我正在寻找的错误。因此,我给了www-data GPIO权限“usermod -a -G gpio www-data”,而不是添加到suddoers中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接