Skip to main content
 首页 » 编程设计

php之Amazon EC2 上通过 php 的 Python 脚本

2024年10月24日22cmt

我正在尝试通过 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执行脚本。