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 的几个配置文件函数
Dec 21 PHP
xml在joomla表单中的应用详解分享
Jul 19 PHP
PHP可逆加密/解密函数分享
Sep 25 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
PHP 简易输出CSV表格文件的方法详解
Jun 20 PHP
浅谈php和.net的区别
Sep 28 PHP
php实现获取文章内容第一张图片的方法
Nov 04 PHP
php 截取中英文混合字符串的方法
May 31 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
Oct 30 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
PHP 实现base64编码文件上传出现问题详解
Sep 01 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中array_merge和array相加的区别分析
2013/06/17 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
javascript 树形导航菜单实例代码
2013/08/13 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
Sortable.js拖拽排序使用方法解析
2016/11/04 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
Python高级应用实例对比:高效计算大文件中的最长行的长度
2014/06/08 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
Flask框架信号用法实例分析
2018/07/24 Python
修改python plot折线图的坐标轴刻度方法
2018/12/13 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
意大利男装网店:Vrients
2019/05/02 全球购物
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
北京SQL新华信咨询
2016/09/30 面试题
杭州-DOTNET笔试题集
2013/09/25 面试题
战友聚会邀请函
2014/01/18 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
出国留学自荐信模板
2015/03/06 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android