【问题标题】:PHP & CURL not sending file, even with @ prependedPHP & CURL 不发送文件,即使带有 @ 前缀
【发布时间】:2012-04-11 15:19:18
【问题描述】:

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

【问题讨论】:

  • 也尝试发送'name' => 'xyz' 值。可以放实际代码吗?
  • 我们需要查看curl代码的其余部分。

标签: php file-upload curl proxy


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-30
      • 2015-04-22
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多