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 相关文章推荐
phpfans留言版用到的install.php
Jan 04 PHP
php 静态化实现代码
Mar 20 PHP
在wamp集成环境下升级php版本(实现方法)
Jul 01 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
Jul 01 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
May 07 PHP
smarty内置函数config_load用法实例
Jan 22 PHP
PHP往XML中添加节点的方法
Mar 12 PHP
PHP 常用的header头部定义汇总
Jun 19 PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 PHP
Laravel手动分页实现方法详解
Oct 09 PHP
PHP封装curl的调用接口及常用函数详解
May 31 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
Dec 31 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 fread()使用技巧
2010/01/22 PHP
php懒人函数 自动添加数据
2011/06/28 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
许愿墙中用到的函数
2006/10/07 Javascript
css图片自适应大小
2007/11/28 Javascript
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
js动态生成Html元素实现Post操作(createElement)
2015/09/14 Javascript
ajax图片上传,图片异步上传,更新实例
2016/12/30 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
[02:53]DOTA2英雄昆卡基础教程
2013/11/25 DOTA
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python Django模板的使用方法(图文)
2013/11/04 Python
将python代码和注释分离的方法
2018/04/21 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
Flask核心机制之上下文源码剖析
2018/12/25 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
Django多数据库的实现过程详解
2019/08/01 Python
python中有关时间日期格式转换问题
2019/12/25 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
小孩百日宴答谢词
2014/01/15 职场文书
工作证明英文模板
2014/10/21 职场文书
家庭贫困证明
2015/06/16 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
python playwright 自动等待和断言详解
2021/11/27 Python