0

我正在使用 Amazon ec2 obunto 微型实例。我编写了一个执行 python 代码并回显结果的 php 代码,它是一个简单的字符串。当我在 obuntu 终端上执行它时,它完美地显示了结果,但是当我通过浏览器访问它时,它什么也没显示。我不知道为什么。实际上它无法执行python脚本。

$tmp = exec('/usr/bin/python /var/www/similarity.py 雇员/失业者/服务员');

如果anyonw可以帮助我,我将不胜感激。PS:我使用的是 mac book pro,当我在计算机的本地主机中使用相同的代码时,一切正常

4

2 回答 2

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执行脚本。

于 2016-05-01T21:13:29.753 回答
0

这是访问 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

这只是示例,您应该根据您的环境更改此行。

于 2013-07-21T08:09:45.760 回答