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


Posted in PHP onJune 19, 2017

在使用 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 相关文章推荐
php session应用实例 登录验证
Mar 16 PHP
php面向对象全攻略 (五) 封装性
Sep 30 PHP
PHP用身份证号获取星座和生肖的方法
Nov 07 PHP
php中opendir函数用法实例
Nov 15 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
Feb 07 PHP
10个值得深思的PHP面试题
Nov 14 PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 PHP
PHP与SQL语句常用大全
Dec 10 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 PHP
PHP PDOStatement::errorInfo讲解
Jan 31 PHP
PHP模糊查询技术实例分析【附源码下载】
Mar 07 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 PHP
Yii2 如何在modules中添加验证码的方法
Jun 19 #PHP
PHP实现的简单操作SQLite数据库类与用法示例
Jun 19 #PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 #PHP
PHP利用Socket获取网站的SSL证书与公钥
Jun 18 #PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 #PHP
PHP更安全的密码加密机制Bcrypt详解
Jun 18 #PHP
Laravel中log无法写入问题的解决
Jun 17 #PHP
You might like
php抽象类使用要点与注意事项分析
2015/02/09 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
python中的函数用法入门教程
2014/09/02 Python
Python中endswith()函数的基本使用
2015/04/07 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
python使用tornado实现登录和登出
2018/07/28 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
Python同时处理多个异常的方法
2020/07/28 Python
学python爬虫能做什么
2020/07/29 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
波兰最大的宠物用品网上商店:FERA.PL
2019/08/11 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
法学专业自我鉴定
2014/02/05 职场文书
语文课外活动总结
2014/08/27 职场文书
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android
Spring Security使用单点登录的权限功能
2022/04/03 Java/Android