我是一個兼職后端的前端程序員。
我用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的官方中文文檔!版本跟不上坑死你!