When the user selects an xlsx file and submits it via POST, I want to take the file, put it into a pandas df, do some data cleaning/formatting, and then send it back to the browser as a downloadable csv.
I've got the python/pandas script working fine. I've been able to successfully pass a simple $PHP variable (the filename) to a Python script, print it out in Python, and then echo it back in PHP. ...but I can't run the rest of the Python script (the pandas part). It's like the rest of my script doesn't exist.
What I'm doing is:
(I haven't figured out the part about how to send the file back to the browser - just trying to get the file first).
I installed python venv in htdocs folder and it is activated.
My PHP:
$fname = $_FILES["upload"]["tmp_name"]; $upload_path = 'uploads/' . $fname; $output = shell_exec('/Applications/MAMP/htdocs/venv/bin/python3 /Applications/MAMP/htdocs/data_cleanse.py ' . $upload_path); echo $output;
My Python works:
import sys print("Variable passed to Python is: " + sys.argv[1])
My Python won't do anything (works when I use regular filename sub sys.argv[1]):
import sys import pandas as pd uploaded_file = sys.argv[1] df = pd.read_excel(uploaded_file) df.to_csv('uploads/completed/completed_doc.csv')
I haven't tried printing df to PHP yet. I just want to see if I can generate a csv file.
I tried escapeshellcmd and system with no success. I read a very similar question here which mentioned chmod 777 for setting permissions. I did this to change the permissions and now my folder is readable and writable by everyone, but it still doesn't work.
I'm confused because everything seems to be working fine and connected except the pandas part. Can anyone help? I'm new to PHP and really appreciate it.
Sounds like you're close. The problem is that PHP is handled on the server side, so if you want the POST to return the web page code, send back HTML, since PHP is used to generate HTML on the server side.
If you have a PHP engine on your server, you can save the PHP server side and return a public link to the newly created PHP page in the POST response.