【发布时间】:2019-09-30 03:33:07
【问题描述】:
我在 EC2 Linux 实例上运行 API。我尝试从 PHP 文件执行 Python 脚本。 PHP 文件的路径是/var/www/html/droptop/api/event/test.php。 Python 脚本的路径是/var/www/html/droptop/blacklist/profanity.py。 Python 脚本接收两个字符串,并通过 Profanity Check 检查这两个字符串之一是否包含令人反感的内容。如果没有发现令人反感的内容,则返回 0,否则返回 1。但是,shell_execalways 似乎返回 NULL。 Profanity Check 需要 Python 3 才能正常工作。
在命令行上执行时,PHP 文件和 Python 脚本完美地协同工作。
我认为这与用户的权限有关。 apache 而不是 www-data 用户正在执行文件。不过,我也根据here更改了sudoers文件。我包括以下几行:
apache ALL=NOPASSWD:/var/www/html/droptop/blacklist/profanity.py
apache ALL=NOPASSWD:/usr/bin/python3.6
我还检查了apache 是否是groups 的一部分。
我还尝试了其他功能,例如exec()、system() 或passthru()。
但它总是返回NULL。
test.php
$command = escapeshellcmd('python3 /var/www/html/droptop/blacklist/profanity.py Some BadWord');
$output = shell_exec($command);
if($output == 0) {
echo json_encode(array("message" => "No Badword found."));
}
profanity.py
#!/usr/bin/python36
from profanity_check import predict, predict_prob
import sys
# get title
title = sys.argv[1]
pred_title = predict([title])
pred_details = 0
if(len(sys.argv) == 3):
details = sys.argv[2]
pred_details = predict([details])
if((pred_title == 0) and (pred_details == 0)):
print(0)
else:
print(1)
这可能是什么问题?
【问题讨论】:
标签: php python amazon-ec2 shell-exec