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中对数据库操作的封装
Oct 09 PHP
PHP Ajax实现页面无刷新发表评论
Jan 02 PHP
for循环连续求和、九九乘法表代码
Feb 20 PHP
php中用date函数获取当前时间有误的解决办法
Aug 02 PHP
php数组保存文本与文本反编成数组实例
Nov 13 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
Mar 05 PHP
PHP7+Nginx的配置与安装教程详解
May 10 PHP
php基于闭包实现函数的自调用(递归)实例分析
Nov 11 PHP
Yii2中datetime类的使用
Dec 17 PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
Laravel使用原生sql语句并调用的方法
Oct 09 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语法(3)
2006/10/09 PHP
PHP 中dirname(_file_)讲解
2007/03/18 PHP
在字符串指定位置插入一段字符串的php代码
2010/02/16 PHP
PHP实现浏览器格式化显示XML的方法示例
2019/01/22 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
jquery ajax abort()的使用方法
2010/10/28 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
Python处理JSON数据并生成条形图
2016/08/05 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
可能是最全面的 Python 字符串拼接总结【收藏】
2018/07/09 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
Python range、enumerate和zip函数用法详解
2019/09/11 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
塔吉特百货公司官网:Target
2017/04/27 全球购物
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
最新奶茶店创业计划书
2014/01/25 职场文书
运动会广播稿20字
2014/02/18 职场文书
董事长助理工作职责范本
2014/07/01 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
解析Java异步之call future
2021/06/14 Java/Android
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android