簡體   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