【问题标题】:PHP and Python on amazon ec2亚马逊 ec2 上的 PHP 和 Python
【发布时间】:2013-07-18 04:36:35
【问题描述】:
我正在使用 Amazon ec2 obunto 微型实例。我编写了一个执行 python 代码并回显结果的 php 代码,它是一个简单的字符串。当我在 obuntu 终端上执行它时,它完美地显示了结果,但是当我通过浏览器访问它时,它什么也没显示。
我不知道为什么。实际上它无法执行python脚本。
$tmp = exec('/usr/bin/python /var/www/similarity.py 雇员/失业者/服务员');
如果anyonw 可以帮助我,我将不胜感激。
PS:我使用的是 mac book pro,当我在计算机的 localhost 中使用相同的代码时,一切正常
【问题讨论】:
标签:
php
python
ubuntu
amazon-ec2
【解决方案1】:
经过一番“摸不着头脑”,我终于想通了。
首先你需要找出正在执行 php.ini 的当前用户。您可以查看 php.info 文件或使用
$processUser = posix_getpwuid(posix_geteuid());
print $processUser['name'];
这将为您提供正在执行代码的用户。就我而言,它是apache 而不是www-data(我不应该首先假设)。
之后你需要编辑sudoers文件(etc/sudoers)
在那边添加行。
如果您想具体一点,可以使用@Janith 的代码。
apache ALL=NOPASSWD:/var/www/similarity.py
apache ALL=NOPASSWD:/usr/bin/python
或者你可以简单地添加
apache ALL=(ALL) NOPASSWD:ALL
(您可能应该只指定路径)。
然后通过php执行脚本。
【解决方案2】:
这是访问 python 文件的权限问题。当您以 apache 用户(很可能是 www-data)通过服务器 python 脚本访问运行它时。所以apache用户没有权限执行python文件。
您可以做的是将此命令作为 sudo 运行,并在 /etc/sudoers 文件中添加对 apache 用户(www-data)的所有必要访问权限,如下例所示。
www-data ALL=NOPASSWD:/var/www/similarity.py
www-data ALL=NOPASSWD:/usr/bin/python
这只是示例,您应该根据您的环境更改此行。