首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP & CURL不发送文件,即使带有@ prepended

PHP & CURL不发送文件,即使带有@ prepended
EN

Stack Overflow用户
提问于 2012-04-11 23:19:19
回答 2查看 1.8K关注 0票数 0

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

下面是一个示例(不是实际的代码):

代码语言:javascript
运行
复制
$data = array(
  'file' => '@'.$_FILES['key']['tmp_name']
);

这是我用来卷曲的.当我粘贴代码时,我注意到我的代码中仍然有http_build_query() ...所以,这一定是问题所在。

代码语言:javascript
运行
复制
$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;

我的问题是最后一台服务器没有接收到文件。相反,数据以键-值对的形式传递。

代码语言:javascript
运行
复制
$_POST contains 'file' => '@c:\wamp\tmp\xyz.tmp'

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-12 00:19:39

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

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

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

代码语言:javascript
运行
复制
$data = array(
  'file' => '@'.$_FILES['key']['tmp_name']
);
curl_setopt($CURL, CURLOPT_POSTFIELDS, $data);
票数 5
EN

Stack Overflow用户

发布于 2012-04-11 23:44:50

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

尝试以二进制格式传输文件,并在curl的头文件中添加文件大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10108926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档