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
Ajax PHP分页演示
Jan 02 PHP
用来给图片加水印的PHP类
Apr 09 PHP
PHP学习笔记之一
Jan 17 PHP
php禁止浏览器使用缓存页面的方法
Nov 07 PHP
PHP合并discuz用户脚本的方法
Aug 04 PHP
深入理解PHP 数组之count 函数
Jun 13 PHP
手把手编写PHP框架 深入了解MVC运行流程
Sep 19 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
php关联数组与索引数组及其显示方法
Mar 12 PHP
PHP中实现中文字串截取无乱码的解决方法
May 29 PHP
PHP常用字符串函数用法实例总结
Jun 04 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
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
引用其它js时如何同时处理多个window.onload事件
2014/09/02 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
深入理解Node内建模块和对象
2019/03/12 Javascript
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
python中字典dict常用操作方法实例总结
2015/04/04 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
Python3远程监控程序的实现方法
2019/07/15 Python
关于多元线性回归分析——Python&SPSS
2020/02/24 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
python如何变换环境
2020/07/21 Python
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
研究生自我鉴定范文
2013/10/30 职场文书
业务员简历自我评价
2014/03/06 职场文书
学生操行评语大全
2014/04/24 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
学生实习证明范文
2014/09/28 职场文书
加薪通知
2015/04/25 职场文书
大学生青年志愿者活动总结
2015/05/06 职场文书
七一活动主持词
2015/06/29 职场文书
排球赛新闻稿
2015/07/17 职场文书
大学同学聚会感言
2015/07/30 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
导游词之海南-南湾猴岛
2019/10/12 职场文书
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers