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 相关文章推荐
玩转虚拟域名◎+ .
Oct 09 PHP
PHP4实际应用经验篇(1)
Oct 09 PHP
php实现以只读方式打开文件的方法
Mar 16 PHP
php中ob函数缓冲机制深入理解
Aug 03 PHP
PHP和Mysql中转UTF8编码问题汇总
Oct 10 PHP
Yii2.0高级框架数据库增删改查的一些操作
Nov 16 PHP
微信支付开发交易通知实例
Jul 12 PHP
老生常谈PHP数组函数array_merge(必看篇)
May 25 PHP
php微信公众号开发之秒杀
Oct 20 PHP
PHP的mysqli_select_db()函数讲解
Jan 23 PHP
PHP使用Session实现上传进度功能详解
Aug 06 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 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简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
mysql下创建字段并设置主键的php代码
2010/05/16 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
jQuery中html()方法用法实例
2014/12/25 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
在vue项目中,使用axios跨域处理
2018/03/07 Javascript
微信小程序全局变量功能与用法详解
2019/01/22 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
vue Tab切换以及缓存页面处理的几种方式
2019/11/05 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现360皮肤按钮控件示例
2014/02/21 Python
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
python中reload(module)的用法示例详解
2017/09/15 Python
python3中os.path模块下常用的用法总结【推荐】
2018/09/16 Python
Python常用的json标准库
2019/02/19 Python
10款最好的Python开发编辑器
2019/07/03 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
2020/10/27 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
介绍一下木马病毒的种类
2015/07/26 面试题
班组长安全生产职责
2013/12/16 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
会计人员演讲稿
2014/09/11 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技