[英]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.