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的类 功能齐全的发送邮件类
Oct 09 PHP
php的header和asp中的redirect比较
Oct 09 PHP
使用网络地址转换实现多服务器负载均衡
Oct 09 PHP
MySql 按时间段查询数据方法(实例说明)
Nov 02 PHP
PHP print类函数使用总结
Jun 25 PHP
PHP 遍历文件实现代码
May 04 PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 PHP
PHP实现批量修改文件后缀名的方法
Jul 30 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
Nov 11 PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 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的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
Javascript中Eval函数的使用
2010/03/23 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
python去掉行尾的换行符方法
2017/01/04 Python
Python连接phoenix的方法示例
2017/09/29 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
介绍一下gcc特性
2012/01/20 面试题
建筑专业自荐信范文
2014/01/05 职场文书
邮政员工辞职信
2014/01/16 职场文书
六月份红领巾广播稿
2014/02/03 职场文书
2014年健康教育实施方案
2014/02/17 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
国家励志奖学金个人先进事迹材料
2014/05/04 职场文书
解除财产保全担保书
2014/05/20 职场文书
西岭雪山导游词
2015/02/06 职场文书
师范生见习自我总结
2015/06/23 职场文书