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 相关文章推荐
如何在WIN2K下安装PHP4.04
Oct 09 PHP
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
Sep 10 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
Nov 01 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
php getcwd与dirname(__FILE__)区别详解
Sep 24 PHP
PHP简单预防sql注入的方法
Sep 27 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
php查找字符串中第一个非0的位置截取
Feb 27 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
Dec 31 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
Feb 11 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
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
php验证手机号码
2015/11/11 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
javascript 定义初始化数组函数
2009/09/07 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
$.format,jquery.format 使用说明
2011/07/13 Javascript
自己编写的类似JS的trim方法
2013/10/09 Javascript
详解JavaScript基于面向对象之继承
2015/12/13 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
详解Python中的type和object
2018/08/15 Python
python实现flappy bird小游戏
2018/12/24 Python
Python中的heapq模块源码详析
2019/01/08 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
python写日志文件操作类与应用示例
2019/07/01 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
FitFlop澳大利亚官网:英国符合人体工学的鞋类品牌
2017/06/05 全球购物
德尔福集团DELPHI的笔试题
2012/02/22 面试题
小学美术教学反思
2014/02/01 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
避暑山庄导游词
2015/02/04 职场文书
功夫熊猫观后感
2015/06/10 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
使用Django实现商城验证码模块的方法
2021/06/01 Python