PHP下載遠程圖片及儲存到本地代碼

來源:互聯網
上載者:User
本在使用 PHP 做簡單的爬蟲的時候,我們經常會遇到需要下載遠程圖片的需求,所以下面來簡單實現這個需求。文主要和大家介紹了PHP實現下載遠程圖片的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考,希望能協助到大家。

1.使用 curl

比如我們有下面這兩張圖片:


$images = [  'https://dn-laravist.qbox.me/2015-09-22_00-17-06j.png',  'https://dn-laravist.qbox.me/2015-09-23_00-58-03j.png'];

第一步,我們可以直接來使用最簡單的代碼實現:


function download($url, $path = 'images/'){  $ch = curl_init();  curl_setopt($ch, CURLOPT_URL, $url);  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);  $file = curl_exec($ch);  curl_close($ch);  $filename = pathinfo($url, PATHINFO_BASENAME);  $resource = fopen($path . $filename, 'a');  fwrite($resource, $file);  fclose($resource);}

那在下載遠程圖片的時候就可以這樣:


foreach ( $images as $url ) {  download($url);}

2.封裝一個類

縷清思路之後,我們可以將這個基本的功能封裝到一個類中:


class Spider {  public function downloadImage($url, $path = 'images/')  {    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $url);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);    $file = curl_exec($ch);    curl_close($ch);    $filename = pathinfo($url, PATHINFO_BASENAME);    $resource = fopen($path . $filename, 'a');    fwrite($resource, $file);    fclose($resource);  }}

在者,我們還可以這樣稍微最佳化一下:


public function downloadImage($url, $path='images/')  {    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $url);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);    $file = curl_exec($ch);    curl_close($ch);    $this->saveAsImage($url, $file, $path);  }  private function saveAsImage($url, $file, $path)  {    $filename = pathinfo($url, PATHINFO_BASENAME);    $resource = fopen($path . $filename, 'a');    fwrite($resource, $file);    fclose($resource);  }

封裝成類之後,我們可以這樣調用代碼來下載圖片:


$spider = new Spider();foreach ( $images as $url ) {  $spider->downloadImage($url);}

這樣,對付基本的遠程圖片下載就OK了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.