知识改变世界
生活可以更简单
注册 登录
***文章***

浅析PHP实现下载远程图片进行本地保存

作者:JellyBool 类型:转载 时间:2017-08-02

在使用 PHP 做一些简单爬虫的时候,我们经常会遇到要下载远程图片,所以下面来简单实现这个需求。

1.使用 curl

比如我们有下面这两张图片:

  1. $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'
    ];

第一步,我们可以直接来使用最简单的代码实现:

  1. 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);
    }
    

那在下载远程图片的时候就可以这样:

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

2.封装一个类

  1. 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);
      }
    }  
    
    

在者,我们还可以这样稍微优化一下:

  1. 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);
      }
    
    

封装成类之后,我们可以这样调用代码来下载图片:

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

这样,对付基本的远程图片下载就OK了。

希望本文所述对大家程序设计有所帮助。

***其他版块***

本站为编程爱好者提供计算机电子书免费资源下载,定期更新!

***其他***

更多内容,敬请期待!谢谢!!!