php把服务器文件curl提交,php中使用curl进行文件上传的巨坑

我是一个兼职后端的前端程序员。

我用laravel写了一套微信公众平台管理系统。有一个需求是,切换了开发模式之后,要将一些需要自动回复的图片先push到微信自己的服务器上,换回media_id,然后用户发关键字给公众号的时候,使用media_id来请微信返回这张图片。

在控制台直接敲curl命令很简单:

curl -F media={real_path}/xxx.jpg "https://api.weixin.qq.com/cgi-bin/media/upload?access_token={Token}&type=image"

但是用php发curl请求的时候,却一直internel error 500。

当时我是这样写的:

$data = array( 'media'=> "@{$imgUrl}" );

$ch1 = curl_init();

$timeout = 5;

curl_setopt ( $ch1, CURLOPT_URL, $url );

curl_setopt ( $ch1, CURLOPT_POST, 1 );

curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );

curl_setopt ( $ch1, CURLOPT_CONNECTTIMEOUT, $timeout );

curl_setopt ( $ch1, CURLOPT_SSL_VERIFYPEER, FALSE );

curl_setopt ( $ch1, CURLOPT_SSL_VERIFYHOST, false );

curl_setopt ( $ch1, CURLOPT_POSTFIELDS, $data );

$result=curl_exec($ch1);

curl_close($ch1);

在发现错误之后我进行了一些其他测试,发现传数据没问题,但文件一直不行。

接下来我在stackoverflow上看到了一篇文章:sending images via curl fails。蒙b的我直到第二天重新看才发现了一个新的对象:\CURLFile。

这是什么?接下来在segmentdefault上看到,有大神也踩了和我一样的坑。

好了,看完之后我们明白了file传不了的原因:php版本不兼容.....

代码里的$data改成这样:

$data = array( 'media'=> new \CURLFile( $imgUrl ) );

没事不要读PHP的官方中文文档!版本跟不上坑死你!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值