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

Страниц (1): [1]
 

1. Morgot_Sauron - 02 Мая, 2022 - 20:31:38 - перейти к сообщению
ОС - 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:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4.  
  5.  
  6. require_once(DIR . '/../../config.php');
  7.  
  8. require_once($CFG->dirroot . '/local/tokenize/classes/forms/tokenization.php');
  9.  
  10. $PAGE->set_url(new moodle_url('/local/tokenize/tokenization.php'));
  11.  
  12. $PAGE->set_context(\context_system::instance());
  13.  
  14. $PAGE->set_title(get_string('TOKENIZATOR', 'local_tokenize'));
  15.  
  16.  
  17.  
  18. $mform= new tokenization();
  19.  
  20. echo $OUTPUT->header();
  21.  
  22.  
  23.  
  24. if ($mform->is_cancelled()) {
  25.  
  26.     //Handle form cancel operation, if cancel button is present on form
  27.  
  28. } else if ($fromform = $mform->get_data()) {
  29.  
  30.   //In this case you process validated data. $mform->get_data() returns data posted in form.
  31.  
  32.  
  33.  
  34.   $name = $mform->get_new_filename('userfile');
  35.  
  36.   echo $name. '<br>';
  37.  
  38.  $content = $mform->get_file_content('userfile');
  39.  
  40.  //echo $content;
  41.  
  42.  var_dump($content);
  43.  
  44.  
  45.  
  46.   $morgot_link = "http:// localhost / diplom / local / tokenize / morgot.py?someamountoftext=" . $content;
  47.  
  48.   $morgot_data = file_get_contents($morgot_link);
  49.  
  50.   echo $morgot_data;
  51.  
  52.  
  53.  
  54. } else {
  55.  
  56.   // this branch is executed if the form is submitted but the data doesn't validate and the form should be redisplayed
  57.  
  58.   // or on the first display of the form.
  59.  
  60.  
  61.  
  62.   //displays the form
  63.  
  64.   $mform->display();
  65.  
  66. }
  67.  
  68.  
  69.  
  70. echo $OUTPUT->footer();
  71.  


Мой 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))
[/python]


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 на получение данных извне.

P.S. В местах http:..... Поставил пробелы, т.к. Не воспринимается форумом - заменяет на [dot][dot][dot]

 

Powered by ExBB FM 1.0 RC1