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 根据IP地址控制访问的代码
Apr 22 PHP
PHP可逆加密/解密函数分享
Sep 25 PHP
PHP删除非空目录的函数代码小结
Feb 28 PHP
php数组转换js数组操作及json_encode的用法详解
Oct 26 PHP
php使用pack处理二进制文件的方法
Jul 03 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
Jul 18 PHP
thinkphp3.0输出重复两次的解决方法
Dec 19 PHP
php+mysqli事务控制实现银行转账实例
Jan 29 PHP
PHP框架Laravel学习心得体会
Oct 28 PHP
Laravel 5.3 学习笔记之 错误&日志
Aug 28 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
Swoole 5将移除自动添加Event::wait()特性详解
Jul 10 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 ajax 分页类代码
2008/11/13 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
原生JavaScript实现todolist功能
2018/03/02 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
[45:52]2018DOTA2亚洲邀请赛 4.1小组赛 A组加赛 LGD vs Liquid
2018/04/02 DOTA
Python 如何访问外围作用域中的变量
2016/09/11 Python
python3之微信文章爬虫实例讲解
2017/07/12 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
Python读写zip压缩文件的方法
2018/08/29 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
python中dict使用方法详解
2019/07/17 Python
Django使用Channels实现WebSocket的方法
2019/07/28 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
django 模型字段设置默认值代码
2020/07/15 Python
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
集体备课反思
2014/02/12 职场文书
幼儿发展评估方案
2014/06/11 职场文书
2014机关干部学习“焦裕禄精神”思想汇报
2014/09/19 职场文书
学习党章的体会
2014/11/07 职场文书
会计主管竞聘书
2015/09/15 职场文书