当用户选择 xlsx 文件并通过 POST 提交时,我想获取该文件,将其放入 pandas df 中,进行一些数据清理/格式化,然后将其作为可下载的 csv 发送回浏览器。
我已经让 python/pandas 脚本正常工作了。 我已经能够成功地将一个简单的 $PHP 变量(文件名)传递给 Python 脚本,在 Python 中打印出来,然后在 PHP 中回显它。 ...但我无法运行 Python 脚本的其余部分(pandas 部分)。就好像我的脚本的其余部分不存在一样。
我正在做的是:
(我还没有弄清楚如何将文件发送回浏览器的部分 - 只是尝试先获取文件)。
我在 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粉4884647312024-03-28 17:43:57
听起来你很接近。 问题在于 PHP 是在服务器端处理的,因此如果您希望 POST 返回网页代码,请发送回 HTML,因为 PHP 是用于在服务器端生成 HTML 的。
如果您的服务器上有 PHP 引擎,则可以保存 PHP 服务器端,并在 POST 响应中返回指向新创建的 PHP 页面的公共链接。