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 相关文章推荐
pw的一个放后门的方法分析
Oct 08 PHP
实用PHP会员权限控制实现原理分析
May 29 PHP
PHP调用Webservice实例代码
Jul 29 PHP
PHP 提取图片img标记中的任意属性的简单实例
Dec 10 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
May 08 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
Mar 05 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
老生常谈PHP面向对象之解释器模式
May 17 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
Oct 17 PHP
tp5 实现列表数据根据状态排序
Oct 18 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 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
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
php中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
php对文件夹进行相关操作(遍历、计算大小)
2015/11/04 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
(function($){...})(jQuery)的意思
2010/07/22 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
python中对list去重的多种方法
2014/09/18 Python
Python实现截屏的函数
2015/07/25 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
NumPy统计函数的实现方法
2020/01/21 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
室内设计实习自我鉴定
2013/09/25 职场文书
租赁协议书范本
2014/04/22 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
骨干教师考核评语
2014/12/31 职场文书
财政局个人年终总结
2015/03/03 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
小学六年级毕业感言
2015/07/30 职场文书
详解Mysql和Oracle之间的误区
2021/05/18 MySQL