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 MySQL应用中使用XOR运算加密算法分享
Aug 28 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
easyui的tabs update正确用法分享
Mar 21 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
Oct 23 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
PHP模板引擎Smarty中的保留变量用法分析
Apr 11 PHP
THinkPHP获取客户端IP与IP地址查询的方法
Nov 14 PHP
PHP7多线程搭建教程
Apr 21 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
thinkPHP框架中layer.js的封装与使用方法示例
Jan 18 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 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获取网址的顶级域名函数代码
2012/09/24 PHP
php之XML转数组函数的详解
2013/06/07 PHP
PHP中的session安全吗?
2016/01/22 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
range 标准化之获取
2011/08/28 Javascript
js 函数调用模式小结
2011/12/26 Javascript
javascript实现youku的视频代码自适应宽度
2015/05/25 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
Python实现进程同步和通信的方法
2018/01/02 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
python基于递归解决背包问题详解
2019/07/03 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
Python中的全局变量如何理解
2020/06/04 Python
详解python程序中的多任务
2020/09/16 Python
师范大学音乐表演专业求职信
2013/10/23 职场文书
房产销售经理职责
2013/12/20 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
酒店仓管员岗位职责
2014/04/28 职场文书
2015年元旦标语大全
2014/12/09 职场文书
面试感谢信范文
2015/01/22 职场文书
英语辞职信范文
2015/02/28 职场文书
物业接待员岗位职责
2015/04/15 职场文书
同意离婚答辩状
2015/05/22 职场文书
学术会议领导致辞
2015/07/29 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书