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+JS无限级可伸缩菜单详解(简单易懂)
Jan 02 PHP
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
php伪静态之APACHE篇
Jun 02 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
Aug 22 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
Nov 18 PHP
Laravel框架中实现使用阿里云ACE缓存服务
Feb 10 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
Feb 14 PHP
总结PHP代码规范、流程规范、git规范
Jun 18 PHP
PHP设计模式之观察者模式定义与用法示例
Aug 04 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 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 STRING 陷阱原理说明
2010/07/24 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
php判断电子邮件是否正确方法
2018/12/04 PHP
PHP $O00OO0=urldecode & eval 解密,记一次商业源码的去后门
2020/09/13 PHP
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
JQuery获取表格数据示例代码
2014/05/26 Javascript
基于promise.js实现nodejs的promises库
2014/07/06 NodeJs
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
Python中join和split用法实例
2015/04/14 Python
浅谈python字符串方法的简单使用
2016/07/18 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
物业公司管理制度
2015/08/05 职场文书
Python中递归以及递归遍历目录详解
2021/10/24 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python
Python+DeOldify实现老照片上色功能
2022/06/21 Python