Jump to content

PHP + Python. Sending data from Moodle php to python CGI and get it back


stanislav

Recommended Posts

I installed Learning Managment System (LMS) 'Moodle' to XAMPP local server. And there is instrument for file downloading, called "filepicker".

I want to pass text, received from 'filepicker' instrument (uploading .txt files only) from LMS Moodle to python-CGI script, process it, get the data back, and echo on a page.

Using:

OS - Windows 10.

Local server: Apache/2.4.53 (Win64) OpenSSL/1.1.1n PHP/7.4.28

python 3.10.4

I made var_dump($content); of uploaded file, So it is definitely a string:

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

Also I clearly know, that my CGI script work if i manually input data in it,like:

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

Output: ['Enter', 'your', 'text', 'here']

But when I press submit button, I only get the name of my file, since I don't transmit it to CGI, but simply echo it.

If just echo content of file, It also works. It brings me to think, that there is something wrong with send&get data part.......

Any thoughts people?

My php code:

<?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();

My CGI python code: 

#!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 - the name of my CGI python file.

Addition: I checked if the $content of file is being placed into $morgot_link:

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

Yes, the output for this is correct:

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

It pushes me to think, that the problem is with receiving part (But I don't completely deny probability with sending part issue). Also I think there could be some kinds of restrictions\permissions in Moodle to recieve data like that.

Sorry for bad English.

Link to comment
Share on other sites

On 5/2/2022 at 10:24 PM, gw1500se said:

You have to output a fully formed HTML page from your script. Meaning all the required tags for any HTML page (<HTML>, <HEAD>, <BODY>, etc.).

Really? Daamn, I hope that's not the only solution. Cause I dont know how to do this in Moodle environment. 

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.