国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php curl優(yōu)化下載微信頭像的方法總結

2024-05-05 00:05:18
字體:
來源:轉載
供稿:網(wǎng)友

curl是什么

百度百科給的解釋是:數(shù)據(jù)傳輸神器。那它神器在什么地方那,通過查找資料得出curl可以使用url的語法模擬瀏覽器來傳輸數(shù)據(jù),因為是模擬瀏覽器所以它支持多種的網(wǎng)絡協(xié)議。目前支持http、https、ftp、gopher、telnet、dict、file和ldap協(xié)議。libcurl同時也支持HTTPS認證、HTTP POST、HTTP PUT、 FTP 上傳(這個也能通過PHP的FTP擴展完成)、HTTP 基于表單的上傳、代理、cookies和用戶名+密碼的認證。

php中使用最多的是通過curl來模擬get和post請求。

引言

做過微信網(wǎng)頁開發(fā)的同學肯定遇到過這樣的需求,基于一張背景圖生成用戶推廣海報,上面需要有推廣二維碼、用戶頭像、用戶名稱等等。本來應該是一個很普通的需求,使用php的gd庫就很容易合成,但是最近在生成這樣海報的時候,發(fā)現(xiàn)時間長達19s,最后發(fā)現(xiàn)問題卡在遠程拉去微信頭像上,所以解決辦法有兩個。

方法一

提前把用戶微信頭像下載下來保存在自己的服務器上,不過我使用七牛云,然后自己服務器又保存一堆用戶頭像,覺得太糟糕了,所以拋棄。

方法二

使用隊列,因為使用laravel,所以很容易就可以把這種費時的任務放到后臺,自己去跑吧。剛開始采用這種方法,后來發(fā)現(xiàn),如果用戶操作很快,一下就跑到生成海報的那一步,可能隊列還沒有跑完,或者隊列失敗了。所以某種程度上會給用戶一種懵逼的感覺,不知道怎么就沒有生成。

方法三

那就優(yōu)化一下下載圖片的速度好了。

在stackoverflow上找到一個帖子,《php - Get compressed contents using cURL》,里面說到給curl加一下參數(shù),從而達到壓縮傳輸?shù)淖饔茫嚵艘幌拢黄鹱饔茫趾髞淼?9s多,變成了1.3s左右。

簡單寫一下代碼(偽代碼):

基于laravel,使用了laravel-wechat, 圖片處理使用intervention/image

獲取遠程圖片內容:

//curl 沒有做錯誤處理 static public function getImage(string $url ) {  $ch = curl_init();  curl_setopt($ch, CURLOPT_URL, $url);  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  curl_setopt($ch, CURLOPT_ENCODING, ""); //加速 這個地方留空就可以了  curl_setopt($ch, CURLOPT_HEADER, 0);  $output = curl_exec($ch);  curl_close($ch);  return $output; }

合成圖片

 static public function poster(User $user, Activity $activity ) {  $img = Image::make(public_path() . $activity->poster_base_img_url);  //$img = Image::make(public_path() .'/wechat.jpg');  $img->text(   $user->nickname, 180, 1060, function( $font ) {   $font->file(public_path() . '/simhei.ttf'); //字體設置   $font->size(28);   $font->color('#fff');   $font->align("center");  }  );  $avatar = Image::make(static::getImage($user->avatar))->resize(182, 182);  $img->insert($avatar, 'bottom-left', 95, 200);  $fileName = str_random(16) . '.jpg';    //可以保存到本地,或者上傳到七牛   $img->save($filePath, 70); }

當然了,我搜了一下“為什么下載微信頭像會這么慢”,有很多大神分析和dns解析有關系,可以先解析成ip,然后在設置curl參數(shù),當然也可以。解決問題方式其實還是挺多的。

使用intervention/image的坑

這個坑可能有的人不會遇到,因為和這個package無關,而是和自己的php環(huán)境有關
如果你自己升級過php版本,然后沒有使用imagick,默認使用gd庫,那么很有可能中遇到Call to undefined function imagecreatefromjpeg()和不支持FreeType 2等一些問題。后來才知道編譯安裝過程中少了:

--with-freetype-dir=DIR --with-jpeg-dir=DIR

所以重新編譯php就可以了。當然如果你不使用gd庫的話,那就不會出問題了,intervention/image默認配置使用的就是gd庫,可以自己修改。

參考文章

http://php.net/manual/zh/imag...

https://stackoverflow.com/que...

https://stackoverflow.com/que...

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 长沙县| 台州市| 江陵县| 五原县| 崇义县| 裕民县| 兴隆县| 淳化县| 丹江口市| 台北县| 微博| 兴宁市| 乌兰县| 西盟| 德钦县| 平凉市| 林周县| 临颍县| 长治市| 分宜县| 军事| 临武县| 江西省| 湟中县| 辽宁省| 拜泉县| 东阿县| 扶沟县| 乐昌市| 石城县| 辽阳县| 屏东市| 南木林县| 双流县| 连州市| 浮梁县| 奉新县| 大邑县| 高州市| 孝感市| 新化县|