PHP&CURL不发送文件,即使是@prepended

Bia*_*bba 0 php proxy curl file-upload

我使用PHP(WAMPServer)接收表单提交,然后使用CURL将文件传递到另一台服务器进行处理.

这是一个示例(不是实际代码):

$data = array(
  'file' => '@'.$_FILES['key']['tmp_name']
);
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的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;
Run Code Online (Sandbox Code Playgroud)

我的问题是最后一台服务器没有收到文件.相反,数据作为键值对传递.

$_POST contains 'file' => '@c:\wamp\tmp\xyz.tmp'
Run Code Online (Sandbox Code Playgroud)

我更喜欢的是文件被传输,$ _FILES有关于它的信息.

Mar*_*c B 5

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

通过构建自己的查询,您将"隐藏" @表示文件上载,而CURL不会触发其上载机制.

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

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