我使用PHP(WAMPServer)接收表单提交,然后使用CURL将文件传递到另一台服务器进行处理。
以下是一个示例(不是实际代码):
$data = array(
'file' => '@'.$_FILES['key']['tmp_name']
);
这是我正在使用的CURL ...当我粘贴代码时,我注意到我的代码中仍然有http_build_query()
...所以,这一定是问题所在。
$CURL = curl_init();
curl_setopt($CURL, CURLOPT_URL, $operation['callback']);
$query_string = http_build_query($arguments);
curl_setopt($CURL, CURLOPT_POSTFIELDS, $query_string);
curl_setopt($CURL, CURLOPT_POST, TRUE);
curl_setopt($CURL, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($CURL);
curl_close($CURL);
return $result;
我的问题是最后一台服务器没有收到该文件。相反,数据作为键值对传递。
$_POST contains 'file' => '@c:\wamp\tmp\xyz.tmp'
我更喜欢的是文件是否已传输,$ _FILES包含有关它的信息。
答案 0 :(得分:5)
不要为CURLOPT_POSTFIELDS构建http查询。 Curl可以直接接受一个字段数组并进行自己的编码/修改。
通过构建自己的查询,您“隐藏”表示文件上传的@
,并且CURL不会触发其上传机制。
换句话说,这将解决问题:
$data = array(
'file' => '@'.$_FILES['key']['tmp_name']
);
curl_setopt($CURL, CURLOPT_POSTFIELDS, $data);
答案 1 :(得分:0)
如果你添加CURL
方法代码,我们最好能回答你......
尝试将文件作为二进制文件传输,并将文件大小添加到curl中的标题中。