搜尋

首頁  >  問答  >  主體

在 PHP 中執行 python 腳本(新增至 Pandas df 並儲存檔案)

當使用者選擇 xlsx 檔案並透過 POST 提交時,我想取得該文件,將其放入 pandas df 中,進行一些資料清理/格式化,然後將其作為可下載的 csv 發送回瀏覽器。

我已經讓 python/pandas 腳本正常運作了。 我已經能夠成功地將一個簡單的 $PHP 變數(檔案名稱)傳遞給 Python 腳本,在 Python 中列印出來,然後在 PHP 中回顯它。 ……但我無法運行 Python 腳本的其餘部分(pandas 部分)。就好像我的腳本的其餘部分不存在一樣。

我正在做的是:

  1. 將臨時提交的檔案從 $_FILES 移到另一個名為「uploads」的資料夾(同一目錄)。
  2. 取得新儲存檔案的路徑。
  3. 將其傳遞到 Python 腳本並將格式化文件保存到上傳/完成 - 我認為這是我在某處失敗的地方

#(我還沒有弄清楚如何將文件發送回瀏覽器的部分 - 只是嘗試先獲取文件)。

我在 htdocs 資料夾中安裝了 python venv,並且它已啟動。

我的 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;

我的Python可以工作:

import sys
print("Variable passed to Python is: " + sys.argv[1])

我的 Python 不會做任何事情(當我使用常規檔案名稱子 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')

我還沒有嘗試將 df 列印到 PHP。我只是想看看是否可以產生 csv 檔案。

我嘗試了 escapeshellcmd 和系統,但沒有成功。我在這裡讀到了一個非常相似的問題,其中提到了 chmod 777 用於設定權限。我這樣做是為了更改權限,現在我的資料夾可供所有人讀寫,但它仍然無法運作。

我很困惑,因為除了 pandas 部分之外,一切似乎都運作良好並且連接良好。有人可以幫忙嗎?我是 PHP 新手,非常感謝它。

P粉536532781P粉536532781303 天前530

全部回覆(1)我來回復

  • P粉488464731

    P粉4884647312024-03-28 17:43:57

    聽起來你很接近。 問題在於 PHP 是在伺服器端處理的,因此如果您希望 POST 返回網頁程式碼,請發送回 HTML,因為 PHP 是用於在伺服器端產生 HTML 的。

    如果您的伺服器上有 PHP 引擎,則可以儲存 PHP 伺服器端,並在 POST 回應中傳回新建立的 PHP 頁面的公開連結。

    回覆
    0
  • 取消回覆