通过亚马逊EC2上的php编写Python脚本


Python script through php on Amazon EC2

我正试图在AmazonEC2实例上通过php运行一个简单的python脚本。

该文件在终端上运行良好,即正在获取输出。但当我在浏览器中尝试同样的操作时,我会得到一个空白页面。

我尝试了一些事情,比如在etc文件夹的sudoers文件中添加www-data ALL=(ALL) ALL。CCD_ 2。

我还尝试禁用SELINIX

我检查了php的安全模式和我在这里发现的其他一些东西(SO)。

我遵循了这个AWS教程。我做的每件事都和上面写的一模一样。我认为存在一些许可问题。

有人能看看吗。我被这个问题困扰了两天。。

编辑Python脚本

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# enable debugging
import cgitb
print "Hello  world"
cgitb.enable()

Php文件:

<?php header("Content-Type:text/plain");
$output = escapeshellcmd('/home/ec2-user/anaconda/envs/xyz/bin/python2.7 /var/www/html/xyz/a.py');
$a=shell_exec($output);
echo ($a);
//echo file_get_contents("/var/www/html/xyz/a.py");
?>

经过一番"挠头",我终于想通了。

首先,您需要弄清楚执行php的当前用户。可以查看php.info文件或使用

$processUser = posix_getpwuid(posix_geteuid());
print $processUser['name'];

这将为您提供执行代码的用户。在我的情况下,它是apache而不是www-data(我一开始就不应该这么认为)。

之后,您需要编辑sudoers文件(etc/sudoers)

把那边的线加起来。

apache ALL=NOPASSWD:/var/www/myfile.py
apache ALL=NOPASSWD:/usr/bin/pythondestination

或者你可以简单地添加

apache ALL=(ALL)        NOPASSWD:ALL

(您可能只需要指定路径即可)。

然后通过php执行脚本。

我想首先应该查看的是apache错误日志。您不想启用sudo。请考虑检查apache的错误日志,以了解以下位置的潜在问题:

/var/log/apache或类似目录

请查看这些帖子以获得更好的解决方案并查看问题:

如何在EC2 Linux 上执行shell_exec

https://forums.aws.amazon.com/thread.jspa?messageID=692394

php shell_exec()命令不起作用