Python脚本向PHP(PostgreSQL)服务器上传图片失败,求解决
问题:Python脚本无法自动上传图片到PHP服务器,数据库无新增数据
我手动通过网页表单能成功将图片存入PostgreSQL数据库,但用Python脚本上传时没有报错,数据库却没新增数据。相关代码如下:
网页表单代码
<html> <head> </head> <body style="border:2px solid Black; padding: 20px; border-radius: 8px; background-color: Teal;"> <center> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="upload" /> <br/><br/> <input type="submit" name="submit" value="upload"> <br/><br> <?php echo '<a href = "http://' . $_SERVER['SERVER_NAME'] . '/images/list.php">Return to the Index.</a>'; ?> </form> </center> </body> </html>
我的Python代码(无法正常工作)
import requests url = 'http://12.34.56.78/images/upload.php' files = {'file': open('The_Great_Archiver.png', 'rb')} r = requests.post(url, files=files)
PHP上传脚本核心逻辑
<?php include "include/connect.php"; if(isset($_POST['submit'])) { // 上传、处理图片及插入数据库的逻辑 } else { echo "Some Error Occurred. Check Code."; } ?>
问题根源与修复方案
你的Python脚本无法触发PHP的上传逻辑,主要有两个关键问题:
表单字段名不匹配
PHP脚本里接收文件的字段是upload(对应表单里的<input type="file" name="upload" />),但你的Python代码里用的是file,导致PHP无法识别上传的文件。缺少
submit触发参数
PHP脚本开头的if(isset($_POST['submit']))判断,要求请求中必须包含submit字段才会执行上传逻辑。手动提交表单时,这个字段会由提交按钮自动带上,但Python脚本里没有传入这个参数。
修改后的Python代码
import requests url = 'http://12.34.56.78/images/upload.php' # 1. 将文件字段名改为`upload`,匹配PHP的接收字段 # 2. 添加`submit`参数,触发PHP的上传逻辑 files = {'upload': open('The_Great_Archiver.png', 'rb')} data = {'submit': 'upload'} # 对应表单里提交按钮的value r = requests.post(url, files=files, data=data) # 打印响应内容,查看PHP返回的信息,方便调试 print(r.text)
额外调试建议
- 打印
r.text查看PHP返回的具体提示,比如是否有文件类型错误、路径权限问题等; - 确保Python脚本中打开的文件路径正确,文件存在且有读取权限;
- 检查PHP服务器的
uploads/和previews/目录是否存在且有写入权限,这会影响文件保存和缩略图生成。
内容的提问来源于stack exchange,提问作者Zephir Lorne
相关产品推荐
相关产品推荐

