我正在尝试通过 Amazon EC2 实例上的 php 运行一个简单的 python 脚本。
该文件在终端上运行良好,即正在获取输出。但是当我在浏览器中尝试相同的操作时,我得到一个空白页面。
我尝试了一些东西,比如在 etc 文件夹的 sudoers 文件中添加 www-data ALL=(ALL) ALL。 etc/sudoers.
我还尝试禁用 SELINIX。
我检查了 php 的安全模式和我在这里发现的其他一些东西(SO)。
我已经关注了这个 AWS TUTORIAL .我完全按照那里写的做了一切。我认为存在一些权限问题。
任何人都可以检查一下。我坚持了 2 天..
编辑 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.ini 的用户。可以查看 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执行脚本。
