[英]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
或类似目录
请查看这些帖子以获得更好的解决方案并查看问题:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.