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)二
Oct 09 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
May 07 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
Jun 26 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
又一个PHP实现的冒泡排序算法分享
Aug 21 PHP
PHP实现的简易版图片相似度比较
Jan 07 PHP
laravel安装zend opcache加速器教程
Mar 02 PHP
discuz图片顺序混乱解决方案
Jul 29 PHP
PHP简单留言本功能实现代码
Jun 09 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
php strftime函数的详细用法
Jun 21 PHP
phpStorm2020 注册码
Sep 17 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实现提高SESSION响应速度的几种方法详解
2019/08/09 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
jQuery中empty()方法用法实例
2015/01/16 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
python根据出生日期获得年龄的方法
2015/03/31 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
在Django中实现添加user到group并查看
2019/11/18 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
如何选择使用结构还是类
2014/05/30 面试题
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
数控专业推荐信范文
2013/12/02 职场文书
中专生自我鉴定书范文
2013/12/28 职场文书
浪费资源的建议书
2014/03/12 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
单位工作证明
2014/10/07 职场文书
工作能力自我评价2015
2015/03/05 职场文书