Я использую API на экземпляре EC2 Linux. Я пытаюсь выполнить скрипт Python из файла PHP. Путь к файлу PHP - /var/www/html/droptop/api/event/test.php
. Путь к скрипту Python /var/www/html/droptop/blacklist/profanity.py
. Скрипт Python получает две строки и проверяет, содержит ли одна из этих строк нежелательный контент, с помощью Проверка ненормативной лексики . Затем он возвращает 0 , если не было обнаружено нежелательного содержимого, в противном случае возвращается 1 . Тем не менее, shell_exec
всегда возвращает NULL
. Проверка ненормативной лексики для правильной работы требуется Python 3.
При выполнении в командной строке файл PHP и скрипт Python отлично работают вместе.
Я предполагаю, что это как-то связано с разрешениями пользователя. apache
а не www-data
пользователь выполняет файлы. Однако я также изменил файл 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)
В чем здесь проблема?