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 表单提交给自己
Jul 24 PHP
PHP mkdir()定义和用法
Jan 14 PHP
PHP 多进程 解决难题
Jun 22 PHP
php上的memcache和memcached两个pecl库
Mar 29 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
php curl post 时出现的问题解决
Jan 30 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
Apr 08 PHP
PHP和C#可共用的可逆加密算法详解
Oct 26 PHP
实例讲解PHP设计模式编程中的简单工厂模式
Feb 29 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
PHP中list方法用法示例
Dec 01 PHP
PHP中多字节字符串操作实例详解
Aug 23 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+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
基于jQuery的history历史记录插件
2010/12/11 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
jquery中radio checked问题
2015/03/16 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
对javascript继承的理解
2016/10/11 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
Javascript生成器(Generator)的介绍与使用
2021/01/31 Javascript
详解Python中的循环语句的用法
2015/04/09 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
详解Python下ftp上传文件linux服务器
2018/06/21 Python
python梯度下降法的简单示例
2018/08/31 Python
python实现贪吃蛇小游戏
2020/03/21 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
2013/01/31 HTML / CSS
什么是makefile? 如何编写makefile?
2013/01/02 面试题
学生个人求职自荐信格式
2013/09/23 职场文书
优秀的计算机专业求职信范文
2013/12/27 职场文书
淮海战役观后感
2015/06/11 职场文书
中秋节感想
2015/08/10 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
python基于opencv批量生成验证码的示例
2021/04/28 Python