Python Forum
Python + PHP. Sending data from "Moodle" (php) to python CGI-script and get it back
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Python + PHP. Sending data from "Moodle" (php) to python CGI-script and get it back
#1
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 processed data back, and echo it 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? Maybe I am doing somethig wrong at the very basics? Like POST vs GET method? Or something else? Huh Think

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.

Useful links:

I followed these instructions for CGI-python script:

step 1) Run Python Programs as Web Applications locally on your Machine with Xampp - https://www.youtube.com/watch?v=cFAcFP3Di6s

step 2) Build a Web API with Python - https://www.youtube.com/watch?v=Bdeclymkt-A

step 3) Call Python (Web API) from PHP - https://www.youtube.com/watch?v=Bx_BEA8VPq0

Moodle installation:

How to install Moodle eLearning in localhost (XAMPP) on Windows - https://www.youtube.com/watch?v=My5DzB874_o

P.S. I also tried curl, replacing $morgot_data = file_get_contents($morgot_link); like this:
$postfields = $content;
$url="http://localhost/diplom/local/tokenize/morgot.py?someamountoftext=";
$ch = curl_init();
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_VERBOSE, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
$result = curl_exec($ch);
echo $result;
Did not help. Wall Wall Wall
Sorry for bad English.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  question regarding my Python port scanner script Than999 0 3,377 Jan-30-2022, 04:31 PM
Last Post: Than999
  Python script for HP switches bcroombs 1 2,418 Jan-25-2022, 08:04 PM
Last Post: Larz60+
  Python script multi client server sonra 1 2,428 Mar-24-2020, 03:49 PM
Last Post: Larz60+
  Threading with python in sending multiple commands? searching1 0 3,957 Jun-12-2019, 09:13 PM
Last Post: searching1
  Assistance with Python Network script cscecela 2 4,724 Feb-24-2019, 01:23 AM
Last Post: searching1
  How to run local python script to remote machine without sending krishna1989 1 8,279 Feb-21-2019, 05:18 PM
Last Post: marienbad
  Pexpect - Python 3.7 - Unable to get my script past the login stage lgreenjr 3 3,799 Nov-01-2018, 10:49 PM
Last Post: lgreenjr
  How to best communicate with android phone from PC running Python script? Sol33t303 1 6,644 Aug-30-2018, 05:04 AM
Last Post: buran
  Sending DNS responses with python - research dnsman2018 0 4,904 Aug-05-2018, 12:01 PM
Last Post: dnsman2018
  Python script for show commands-CISCO Devices babbarsher 1 12,929 Dec-13-2017, 11:44 PM
Last Post: Larz60+

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020