0

我正在使用 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 有关于它的信息。

4

2 回答 2

5

不要为 CURLOPT_POSTFIELDS 构建 http 查询。Curl 可以直接接受字段数组并进行自己的编码/修改。

通过构建您自己的查询,您“隐藏”了@表明文件上传和 CURL 不会触发其上传机制的内容。

换句话说,这将解决问题:

$data = array(
  'file' => '@'.$_FILES['key']['tmp_name']
);
curl_setopt($CURL, CURLOPT_POSTFIELDS, $data);
于 2012-04-11T16:19:39.093 回答
0

如果您添加CURL方法代码,我们可以更好地回答您...

尝试将文件作为二进制文件传输,并在 curl 的标题中添加文件大小。

于 2012-04-11T15:44:50.473 回答