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 相关文章推荐
提问的智慧(2)
Oct 09 PHP
PHP+DBM的同学录程序(5)
Oct 09 PHP
PHP的博客ping服务代码
Feb 04 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
Aug 22 PHP
详解WordPress开发中get_header()获取头部函数的用法
Jan 08 PHP
php+mysql实现的二级联动菜单效果详解
May 10 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
PHP下载远程图片的几种方法总结
Apr 07 PHP
Laravel5中Cookie的使用详解
May 03 PHP
PHP CURL与java http使用方法详解
Jan 26 PHP
php7下的filesize函数
Sep 30 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
May 02 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微信开发之图片回复功能
2018/06/14 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
海量经典的jQuery插件集合
2010/01/12 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
jquery的checkbox,radio,select等方法小结
2016/08/30 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
js+canvas实现简单扫雷小游戏
2021/01/22 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
python批量下载图片的三种方法
2013/04/22 Python
Python使用剪切板的方法
2017/06/06 Python
Python 从相对路径下import的方法
2018/12/04 Python
Python最小二乘法矩阵
2019/01/02 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
python线性插值解析
2020/07/05 Python
Python如何给你的程序做性能测试
2020/07/29 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
Capitol Lighting的1800lighting.com:住宅和商业照明
2019/04/10 全球购物
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
演讲主持词
2014/03/18 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
经营场所使用证明
2015/06/19 职场文书
解约证明模板
2015/06/19 职场文书
2016年感恩节寄语
2015/12/07 职场文书
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技