我是一個(gè)兼職后端的前端程序員缰冤。
我用laravel寫了一套微信公眾平臺(tái)管理系統(tǒng)戚揭。有一個(gè)需求是搓译,切換了開發(fā)模式之后,要將一些需要自動(dòng)回復(fù)的圖片先push到微信自己的服務(wù)器上捧请,換回media_id凡涩,然后用戶發(fā)關(guān)鍵字給公眾號(hào)的時(shí)候,使用media_id來請(qǐng)微信返回這張圖片疹蛉。
在控制臺(tái)直接敲curl命令很簡(jiǎn)單:
curl -F media={real_path}/xxx.jpg "https://api.weixin.qq.com/cgi-bin/media/upload?access_token={Token}&type=image"
但是用php發(fā)curl請(qǐng)求的時(shí)候突照,卻一直internel error 500。
當(dāng)時(shí)我是這樣寫的:
$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);
在發(fā)現(xiàn)錯(cuò)誤之后我進(jìn)行了一些其他測(cè)試氧吐,發(fā)現(xiàn)傳數(shù)據(jù)沒問題讹蘑,但文件一直不行。
接下來我在stackoverflow上看到了一篇文章:sending images via curl fails筑舅。蒙b的我直到第二天重新看才發(fā)現(xiàn)了一個(gè)新的對(duì)象:\CURLFile座慰。
這是什么?接下來在segmentdefault上看到翠拣,有大神也踩了和我一樣的坑版仔。
好了,看完之后我們明白了file傳不了的原因:php版本不兼容.....
代碼里的$data改成這樣:
$data = array( 'media'=> new \CURLFile( $imgUrl ) );
沒事不要讀PHP的官方中文文檔!版本跟不上坑死你蛮粮!