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 相关文章推荐
超级简单的发送邮件程序
Oct 09 PHP
队列在编程中的实际应用(php)
Sep 04 PHP
php定时计划任务的实现方法详解
Jun 06 PHP
解析php中的escape函数
Jun 29 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
Oct 30 PHP
php常用hash加密函数
Nov 22 PHP
PHP中实现获取IP和地理位置类分享
Feb 10 PHP
php简单计算页面加载时间的方法
Jun 19 PHP
PHP curl模拟登录带验证码的网站
Nov 30 PHP
学习php设计模式 php实现享元模式(flyweight)
Dec 07 PHP
PHP模板引擎Smarty中变量的使用方法示例
Apr 11 PHP
Laravel框架源码解析之入口文件原理分析
May 14 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
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
使用PHP批量生成随机用户名
2008/07/10 PHP
PHP 递归效率分析
2009/11/24 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
php日历制作代码分享
2014/01/20 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
Yii 2.0在Grid中格式化时间方法示例
2017/06/06 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
date.parse在IE和FF中的区别
2010/07/29 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
Python SQLite3数据库操作类分享
2014/06/10 Python
scrapy爬虫完整实例
2018/01/25 Python
Python之reload流程实例代码解析
2018/01/29 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
Python给图像添加噪声具体操作
2019/03/03 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
毕业生在校学习的自我评价分享
2013/10/08 职场文书
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
计算机软件专业求职信
2014/06/10 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
建房合同协议书
2016/03/21 职场文书
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技