我正试图在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()命令不起作用