繁体   English   中英

在 Amazon EC2 上通过 php 的 Python 脚本

[英]Python script through php on Amazon EC2

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

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

我尝试了几件事,例如在 etc 文件夹的 sudoers 文件中添加www-data ALL=(ALL) ALL etc/sudoers

我也尝试禁用SELINIX

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

我遵循了这个AWS 教程 我所做的一切都与那里写的完全一样。 我相信存在一些许可问题。

任何人都可以请检查一下。 我坚持了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执行脚本。

我想第一个应该看的是 apache 错误日志。 希望启用sudo的。 请考虑检查 apache 的错误日志以了解潜在问题是什么:

/var/log/apache或类似目录

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

如何在 EC2 Linux 上执行 shell_exec

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

php shell_exec() 命令不起作用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM