Apabila pengguna memilih fail xlsx dan menyerahkannya melalui POST, saya ingin mengambil fail itu, memasukkannya ke dalam df panda, melakukan pembersihan/pemformatan data, dan kemudian menghantarnya semula ke penyemak imbas sebagai csv yang boleh dimuat turun.
Saya mempunyai skrip python/pandas berfungsi dengan baik. Saya telah berjaya menghantar pembolehubah $PHP mudah (nama fail) kepada skrip Python, mencetaknya dalam Python, dan kemudian menggemakannya semula dalam PHP. ...tetapi saya tidak boleh menjalankan skrip Python yang lain (bahagian panda). Ia seperti skrip saya yang lain tidak wujud.
Apa yang saya lakukan ialah:
(Saya tidak tahu bahagian tentang cara menghantar semula fail ke penyemak imbas - hanya cuba mendapatkan fail dahulu).
Saya memasang python venv dalam folder htdocs dan ia diaktifkan.
PHP saya:
$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;
Sawa Saya berfungsi:
import sys print("Variable passed to Python is: " + sys.argv[1])
Python saya tidak melakukan apa-apa (berfungsi apabila saya menggunakan nama fail biasa 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')
Saya belum cuba mencetak df ke PHP lagi. Saya hanya mahu melihat sama ada saya boleh menjana fail csv.
Saya mencuba escapeshellcmd dan sistem tidak berjaya. Saya membaca soalan yang sangat serupa di sini yang menyebut chmod 777 untuk menetapkan kebenaran. Saya melakukan ini untuk menukar kebenaran dan kini folder saya boleh dibaca dan ditulis oleh semua orang, tetapi ia masih tidak berfungsi.
Saya keliru kerana semuanya kelihatan berfungsi dengan baik dan bersambung kecuali bahagian panda. Ada sesiapa boleh tolong? Saya baru menggunakan PHP dan sangat menghargainya.
Bunyi seperti anda dekat. Masalahnya ialah PHP dikendalikan di bahagian pelayan, jadi jika anda mahu POST mengembalikan kod halaman web, hantar balik HTML, kerana PHP digunakan untuk menjana HTML pada bahagian pelayan.
Jika anda mempunyai enjin PHP pada pelayan anda, anda boleh menyimpan bahagian pelayan PHP dan mengembalikan pautan awam ke halaman PHP yang baru dibuat dalam respons POST.