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 相关文章推荐
BBS(php & mysql)完整版(一)
Oct 09 PHP
PHP+DBM的同学录程序(5)
Oct 09 PHP
PHP学习 变量使用总结
Mar 24 PHP
php中的一些数组排序方法分享
Jul 20 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 PHP
yii的CURD操作实例详解
Dec 04 PHP
php自定义错误处理用法实例
Mar 20 PHP
帝国cms常用标签汇总
Jul 06 PHP
Yii2隐藏frontend/web和backend/web的方法
Dec 12 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 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
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
php浏览历史记录的方法
2015/03/10 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
理清apply(),call()的区别和关系
2011/08/14 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
js canvas实现红包照片效果
2018/08/21 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
Python的组合模式与责任链模式编程示例
2016/02/02 Python
Python实现的计数排序算法示例
2017/11/29 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
python实现简单坦克大战
2020/03/27 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
化工专业求职信
2014/07/01 职场文书
艺术节开幕词
2015/01/28 职场文书
学生会辞职信
2015/03/02 职场文书
人事聘任通知
2015/04/21 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python