PHP实现下载远程图片保存到本地的方法

 更新时间:2017年06月19日 09:55:54   作者:JellyBool  
本篇文章主要介绍了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了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • PHP中__get()和__set()的用法实例详解

    PHP中__get()和__set()的用法实例详解

    在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性,对每个字段进行set和get的操作。只需要加上两个魔术方法即可
    2013-06-06
  • java微信开发之上传下载多媒体文件

    java微信开发之上传下载多媒体文件

    这篇文章主要为大家详细介绍了java微信开发之简单实现上传下载多媒体文件的相关资料,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • 基于initPHP的框架介绍

    基于initPHP的框架介绍

    本篇文章小编将为大家介绍,initPHP框架,需要的朋友参考下
    2013-04-04
  • php+ajax导入大数据时产生的问题处理

    php+ajax导入大数据时产生的问题处理

    介绍:就是想实现简单的ajax上传数据,但是当数据量较大的时候,问题就一个一个接着来了,其实数据也不是很大,就是csv格式数据 不到5w条数据。大小5M,一开始认为这个很简单,就是先上传一下文件,然后读取一下,存到数据库就好了,结果,可能我比较菜,弄了半天做出这个功能。环境是linux.
    2014-06-06
  • 基于thinkPHP3.2实现微信接入及查询token值的方法

    基于thinkPHP3.2实现微信接入及查询token值的方法

    这篇文章主要介绍了基于thinkPHP3.2实现微信接入及查询tooken值的方法,结合实例形式分析了thinkPHP整合微信接口操作token值查询的具体实现步骤与相关操作技巧,需要的朋友可以参考下
    2017-04-04
  • destoon调用企业会员公司形象图片的实现方法

    destoon调用企业会员公司形象图片的实现方法

    这篇文章主要介绍了destoon调用企业会员公司形象图片的实现方法,非常实用,需要的朋友可以参考下
    2014-08-08
  • PHP、Python和Javascript的装饰器模式对比

    PHP、Python和Javascript的装饰器模式对比

    这篇文章主要介绍了PHP、Python和Javascript的装饰器模式对比,修饰模式(Decorator Pattern),又叫装饰者模式,是面向对象编程领域中,一种动态地往一个类中添加新的行为的设计模式,需要的朋友可以参考下
    2015-02-02
  • YII2框架使用控制台命令的方法分析

    YII2框架使用控制台命令的方法分析

    这篇文章主要介绍了YII2框架使用控制台命令的方法,结合实例形式分析了YII2使用控制台命令的相关步骤、原理与操作技巧,需要的朋友可以参考下
    2020-03-03
  • Laravel+jQuery实现AJAX分页效果

    Laravel+jQuery实现AJAX分页效果

    这篇文章主要介绍了Laravel+jQuery实现AJAX分页效果的方法,简单介绍了jQuery的ajax调用结合Laravel控制器实现无刷新分页功能的相关操作技巧,需要的朋友可以参考下
    2016-09-09
  • TP5使用RabbitMQ实现消息队列的项目实践

    TP5使用RabbitMQ实现消息队列的项目实践

    本文主要介绍了TP5使用RabbitMQ实现消息队列的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06

最新评论