当用户选择 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 新手,非常感谢它。
听起来你很接近。 问题在于 PHP 是在服务器端处理的,因此如果您希望 POST 返回网页代码,请发送回 HTML,因为 PHP 是用于在服务器端生成 HTML 的。
如果您的服务器上有 PHP 引擎,则可以保存 PHP 服务器端,并在 POST 响应中返回指向新创建的 PHP 页面的公共链接。