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 异常处理实现代码
Mar 10 PHP
php自动加载的两种实现方法
Jun 21 PHP
PHP转换文件夹下所有文件编码的实现代码
Jun 06 PHP
smarty内置函数capture用法分析
Jan 22 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
php判断linux下程序问题实例
Jul 09 PHP
PHP之预定义接口详解
Jul 29 PHP
PHP中addslashes与mysql_escape_string的区别分析
Apr 25 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
Jun 28 PHP
PHP判断是否是微信打开,浏览器打开的方法
Mar 14 PHP
PDO::quote讲解
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生成静态页面详解
2006/11/19 PHP
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
2019/04/25 Javascript
python实现备份目录的方法
2015/08/03 Python
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
【python】matplotlib动态显示详解
2019/04/11 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
几款好用的python工具库(小结)
2020/10/20 Python
Python利用matplotlib绘制散点图的新手教程
2020/11/05 Python
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
视光学毕业生自荐书范文
2014/02/13 职场文书
创先争优一句话承诺
2014/05/29 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
电工生产实习心得体会
2016/01/22 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js