Python + php. Передача данных из LMS Moodle в python-CGI скрипт, обработка и получение результата обратно в php.

Morgot and sauron

Новичок
Пользователь
Апр 27, 2022
6
0
1
ОС - Windows 10.
Локальный сервер: Apache/2.4.53 (Win64) OpenSSL/1.1.1n PHP/7.4.28
python 3.10.4

В развёрнутой мной на локальном сервере XAMPP, платформе LMS 'Moodle'(платформа для обучения) есть инструмент загрузки файлов "filepicker". Я хочу передать текст, полученный из инструмента filepicker ( загружает только .txt ), обработать его, получить данные обратно, и вывести (echo) на страницу.

Я выполнил var_dump($content); загруженного файла, Так что это точно строка:

string(828) "..........my text here............"

Ещё я точно знаю, что мой python-CGI скрипт работает, если я вручную буду вводить данные(делается через строку браузера - знак вопроса, имя переменной, = ввод данных):

http://localhost/speciallocation/local/tokenize/morgot.py?someamountoftext=Enter your text here

Вывод: ['Enter', 'your', 'text', 'here']

Но, когда я нажимаю на кнопку submit, выводится только название моего файла, ввиду того, что я не отсылал его на обработку в CGI, а просто вывел его echo'м. Если просто вывести echo'м содержимое файла, это также даст результат.

Это наводит меня на мысль, что проблема где-то в части отправить\принять данные.....

Какие-нибудь мысли, народ?

Мой php код:

PHP:
<?php



require_once(DIR . '/../../config.php');

require_once($CFG->dirroot . '/local/tokenize/classes/forms/tokenization.php');

$PAGE->set_url(new moodle_url('/local/tokenize/tokenization.php'));

$PAGE->set_context(\context_system::instance());

$PAGE->set_title(get_string('TOKENIZATOR', 'local_tokenize'));



$mform= new tokenization();

echo $OUTPUT->header();

 

if ($mform->is_cancelled()) {

    //Handle form cancel operation, if cancel button is present on form

} else if ($fromform = $mform->get_data()) {

  //In this case you process validated data. $mform->get_data() returns data posted in form.

 

  $name = $mform->get_new_filename('userfile');

  echo $name. '<br>';

 $content = $mform->get_file_content('userfile');

 //echo $content;

 var_dump($content);

 

  $morgot_link = "http://localhost/diplom/local/tokenize/morgot.py?someamountoftext=" . $content;

  $morgot_data = file_get_contents($morgot_link);

  echo $morgot_data;

 

} else {

  // this branch is executed if the form is submitted but the data doesn't validate and the form should be redisplayed

  // or on the first display of the form.



  //displays the form

  $mform->display();

}



echo $OUTPUT->footer();


Мой python CGI код:

Python:
#!C:\Users\HP\AppData\Local\Programs\Python\Python310-32\python.exe



import os

import urllib.parse

import nltk



query_dict = urllib.parse.parse_qs(os.environ['QUERY_STRING'])

input_something = str(query_dict['someamountoftext'])[2: -2]

def tknz_wrd(someamountoftext):

    return(nltk.word_tokenize(someamountoftext))





print("Content-Type: text/html\n")



print (tknz_wrd(input_something))

morgot.py - Имя моего CGI python файла.

Дополнение: Я проверил ставится ли содержимое фала($content) в $morgot_link:

$morgot_link = "http://localhost/diplom/local/tokenize/morgot.py?someamountoftext=" . $content;
echo $morgot_link;

Да, вывод верный:

http://localhost/diplom/local/tokenize/morgot.py?someamountoftext=...........many text here.............

Это тем более наводит на мысль, что проблема в части "получить данные"($morgot_data = file_get_contents($morgot_link);

Также я не отрицаю, что могут быть какие-то ограничения\разрешения в Moodle на получение данных извне.
 
Последнее редактирование:

Форум IT Специалистов