在做微信卡券使用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"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 这个路径是不存在的
第二种方式只会将其当作普通字符串处理
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“PHP CURL post数据报错 failed creating formpost data”评论...
更新日志
2025年05月05日
2025年05月05日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]