PHP&即使使用@prepended,CURL也不会发送文件

时间:2012-04-11 15:19:19

标签: php file-upload curl proxy

我使用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包含有关它的信息。

2 个答案:

答案 0 :(得分:5)

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

通过构建自己的查询,您“隐藏”表示文件上传的@,并且CURL不会触发其上传机制。

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

$data = array(
  'file' => '@'.$_FILES['key']['tmp_name']
);
curl_setopt($CURL, CURLOPT_POSTFIELDS, $data);

答案 1 :(得分:0)

如果你添加CURL方法代码,我们最好能回答你......

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