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中计算时间差的几种方法
Dec 31 PHP
php HtmlReplace输入过滤安全函数
Jul 03 PHP
php visitFile()遍历指定文件夹函数
Aug 21 PHP
PHPExcel读取Excel文件的实现代码
Dec 06 PHP
php array的学习笔记
May 16 PHP
php和javascript之间变量的传递实现代码
Dec 19 PHP
解析yahoo邮件用phpmailer发送的实例
Jun 24 PHP
PHP header()函数常用方法总结
Apr 11 PHP
php猴子选大王问题解决方法
May 12 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
PHP基于yii框架实现生成ICO图标
Nov 13 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 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使用递归按层级查找数据的方法
2019/11/10 PHP
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
PHP abstract与interface之间的区别
2013/11/11 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
window.onload使用指南
2015/09/13 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
JS实现页面进入和返回定位到具体位置
2016/12/08 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
Node 代理访问的实现
2019/09/19 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
详解python3中tkinter知识点
2018/06/21 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
幼儿园教师个人反思
2014/01/30 职场文书
忠诚奉献演讲稿
2014/09/12 职场文书
师德师风整改措施
2014/10/24 职场文书
感恩教育主题班会
2015/08/12 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书