PHP CURL post数据报错 failed creating formpost data


Posted in PHP onOctober 16, 2016

在做微信卡券使用curl上传logo图片时,发现一个报错:

failed creating formpost data

代码中数组如下:

$data = array('buffer' => '@test.jpg');

结合微信给的文档,检查语法,貌似并没有发现什么错误...

经过上网查询和验证,最终发现,问题出现在 @ 这里,如果在 @ 前面加一个 \ 转义下就可以了,在php官方的bugs.php.net中也有提到(本文最后提供网址)

最终代码:

$data = array('buffer' => '\\@test.jpg');

问题解决。

bugs地址参考:https://bugs.php.net/bug.php?id=50060

我们再来看一个实例:

之前写过一个php使用curl上传文件的代码,今天暴出了一个bug,curl错误信息为"failed creating formpost data"

先说一下curl上传文件的过程吧

$file =array("upimg"=>"@/tmp/tmp.jpg");//文件路径,前面要加@,表明是文件上传. 
$url = 'http://localhosts/upload.php'; 
$ch = curl_init(); 
curl_setopt($ch ,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_POST,true); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$file); 
curl_exec($ch);

这里有两个地方需要注意:

1、$file必须是数组

2、上传文件的路径前面加@

3、路径必须使用决定路径

现在分析出现"failed creating formpost data" 错误原因

首先很快就定位到出现该问题的原因是路径问题,分析了程序代码也没发现什么问题,始终不得解

最后通过错误日志查得这个原因是因为curl post提交的数据参数中有一个参数内容是以@符号开头的,

比如说要上传/tmp/tmp.jpg,同时提交简介,这样参数值就是 path='/tmp/tmp.jpg', 输入简介desc='@test haha';

根据手册上说curl post提交数据有两种方式

1.curl($ch, CURLOPT_POSTFIELD, array('pic'=>'@/tmp/tmp.jpg', 'filename'=>'tmp'); 
 
2.curl($ch, CURLOPT_POSTFIELD, 'pic=@/tmp/tmp.jpg&filename=tmp')

在有上传文件的情况下必须使用第一种方式

curl($ch, CURLOPT_POSTFIELD, array('pic'=>'@/tmp/tmp.jpg', 'filename'=>'tmp'); 

这样如果第一字符是@符后面的内容均会被解析成地址,如果地址不存在就会抛出该错误,就想简介desc @test 这个路径是不存在的

第二种方式只会将其当作普通字符串处理

PHP 相关文章推荐
用PHP动态创建Flash动画
Oct 09 PHP
简单易用的计数器(数据库)
Oct 09 PHP
第一节--面向对象编程
Nov 16 PHP
PHP编程中字符串处理的5个技巧小结
Nov 13 PHP
PHP 可阅读随机字符串代码
May 26 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
php导出CSV抽象类实例
Sep 24 PHP
php实现检查文章是否被百度收录
Jan 27 PHP
PHP记录和读取JSON格式日志文件
Jul 07 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 PHP
thinkphp5实现微信扫码支付
Dec 23 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
May 02 PHP
PHPStrom 新建FTP项目以及在线操作教程
Oct 16 #PHP
php根据数据id自动生成编号的实现方法
Oct 16 #PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 #PHP
jquery+thinkphp实现跨域抓取数据的方法
Oct 15 #PHP
php组合排序简单实现方法
Oct 15 #PHP
PHP中字符与字节的区别及字符串与字节转换示例
Oct 15 #PHP
php实现博客,论坛图片防盗链的方法
Oct 15 #PHP
You might like
浅析Yii2缓存的使用
2016/05/10 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
angularjs指令之绑定策略(@、=、&)
2017/04/13 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
浅谈python对象数据的读写权限
2016/09/12 Python
Python获取当前路径实现代码
2017/05/08 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
python实现电脑自动关机
2018/06/20 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
香港交友网站:be2香港
2018/07/22 全球购物
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
大队委竞选演讲稿
2014/04/28 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
计算机实训心得体会
2016/01/14 职场文书
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android