我需要将一些.csv文件上传到自签名的https apache服务器。 我的https服务器正在运行PHP。我的客户端正在运行python脚本将文件POST到https服务器。 PHP.ini有10M for upload_file和POST_max_size指令,没有额外的空格。我需要上传的文件只有4千字节
我的python脚本:
import requests
username = "user"
password = 'password'
myfile = "/full/path/to/myfile.csv"
url = "https://www.mydomain.com/file_upload.php"
files = {'file': open(myfile, 'rb')}
r = requests.post(url, files=files, auth=(username, password), verify=False)
print r.text
print r.status_code
我收到状态代码200,但该文件不在目标服务器中 我相信错误发生在我的file_upload.php
中$ _ FILES ['userfile'] ['name']是我在从HTML表单发布文件时使用的名称,而不再是这种情况。 我相信我错过了一些东西,因为我对PHP中的$ _FILES变量缺乏了解 - 当没有从表单发布时文件ID应该是什么样子?
<?php
$uploaddir = '/var/www/html/uploads/';
$uploadfile = $uploaddir . basename($_FILES['file-id']['name']);
move_uploaded_file($_FILES['file-id']['tmp_name'], $uploadfile);
error_log(print_r($_FILES['file-id']['error']), 3, $error_log_file);
?>
my apache error.log报告以下PHP通知
[Thu Jun 05 09:35:19.120760 2014] [:error] [pid 8030] [client xxx.xxx.xxx.xxx:49207] PHP警告:在未知的多部分/表格数据POST数据中缺少边界第0行
[Thu Jun 05 09:35:19.124625 2014] [:error] [pid 8030] [client xxx.xxx.xxx.xxx:49207] PHP注意:未定义的索引:/ var / www / html / file_upload中的文件第8行的.php
[Thu Jun 05 09:35:19.124673 2014] [:error] [pid 8030] [client xxx.xxx.xxx.xxx:49207] PHP注意:未定义的索引:/ var / www / html / file_upload中的文件第11行的.php
[Thu Jun 05 09:35:19.124686 2014] [:error] [pid 8030] [client xxx.xxx.xxx.xxx:49207] PHP注意:未定义的索引:/ var / www / html / file_upload中的文件第12行的.php
权限 我的www文件夹是chown -R www-data.www-data
答案 0 :(得分:0)
以下是解决方案:
如果要使用python模块上传文件,请按以下方式读取文件:
files = {'testname': open(myfile, 'rb')}
现在在接收PHP文件中,必须使用$ _FILES变量,如下所示:
$uploadfile = $uploaddir . basename($_FILES['testname']['name']);
move_uploaded_file($_FILES['testname']['tmp_name'], $uploadfile);
$ _FILES索引的名称基本上是你在python中读取文件名时给出的标签的名称。