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新手谈谈我的学习心得
Feb 25 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
May 02 PHP
php面向对象 字段的声明与使用
Jun 14 PHP
PHP验证码函数代码(简单实用)
Sep 29 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
浅谈php安全性需要注意的几点事项
Jul 17 PHP
PHP间隔一段时间执行代码的方法
Dec 02 PHP
php猜单词游戏
Sep 29 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
Nov 05 PHP
PHP简单的MVC框架实现方法
Dec 01 PHP
php5.3后静态绑定用法详解
Nov 11 PHP
Yii框架实现多数据库配置和操作的方法
May 25 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
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
2013/02/28 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
Python管理Windows服务小脚本
2018/03/12 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
python实现猜数字小游戏
2020/03/24 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
西班牙高科技产品购物网站:MejorDeseo
2019/09/08 全球购物
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
护理专科毕业推荐信
2013/11/10 职场文书
文明之星事迹材料
2014/05/09 职场文书
积极向上的团队口号
2014/06/06 职场文书
出国留学自荐信模板
2015/03/06 职场文书
教师思想工作总结2015
2015/05/13 职场文书
硕士论文致谢范文
2015/05/14 职场文书
信仰观后感
2015/06/03 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL