【问题标题】:Can't execute python script from php无法从 php 执行 python 脚本
【发布时间】:2013-09-08 23:29:05
【问题描述】:

已解决

在编写新问题之前,我会在整个网络上搜索解决方案。 我有一个带有 apache2、php5.4、ssl 的树莓派。 我想从 php 执行一个 python 脚本。 php脚本在/var/www里面,有777权限。 php文件:

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

Prova.py 有 750 权限,但他的组所有者是 www-data,即 shell_exec('whoami'); 打印的用户;哪个有效。 Prova.py:

print "Hello World"

脚本直接从命令行运行:

php filename.php

它在浏览器中不起作用!

最后我成功地从浏览器执行了脚本。 我必须将 www-data 用户添加到具有相关权限的 sudoers 文件中:

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

【问题讨论】:

  • Prova.py != prova.py,检查你的 python 脚本的真正名称。您是否收到错误消息(检查您的服务器日志)?另外www-data需要有/home/pi/Desktop/Python/的访问权限

标签: php python


【解决方案1】:

你的问题是这样的: 通过控制台启动 php 脚本时,您将使用当前用户的权限启动 php。 当一个进程通过在浏览器中打开来执行时,它将拥有你的 web-server-process 用户的权限。

无论如何,您的组权限都必须为 7。将 python 脚本权限更改为 777(每个人都可以读-写-执行)或将其更改为 770 并确保您的 web-servers 用户在设置为文件的组内。

【讨论】:

  • 我试图将 prova.py 移动到 var/www 的子目录中,现在......幸运的是它可以工作!
  • 我试图使 python 脚本复杂化以播放声音。于是我导入了time和pygame库,问题又回来了。它可以从命令行运行,但不能通过浏览器运行
  • 文件当前设置了哪些权限?
【解决方案2】:

在尝试构建 Web 界面以更改墨迹 pHAT 上的图像时,我遇到了类似的问题。原来 www-data 无权访问 GPIO.OUT。通过运行“sudo -u www-data php index.php”进行测试,它返回了我正在寻找的错误。所以我给 www-data GPIO 权限“usermod -a -G gpio www-data”,而不是添加到 suddoers。

【讨论】:

    最近更新 更多