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 数字左侧自动补0
Mar 31 PHP
PHP目录函数实现创建、读取目录教程实例
Jan 13 PHP
PHP中file_exists与is_file,is_dir的区别介绍
Sep 12 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
Jun 26 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
Jan 14 PHP
用PHP代替JS玩转DOM的思路及示例代码
Jun 15 PHP
phpStudy访问速度慢和启动失败的解决办法
Nov 19 PHP
PHP生成图片验证码功能示例
Jan 12 PHP
laravel手动创建数组分页的实现代码
Jun 07 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
Feb 20 PHP
启用OPCache提高PHP程序性能的方法
Mar 21 PHP
php查看一个变量的占用内存的实例代码
Mar 29 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
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
php中的时间显示
2007/01/18 PHP
php与paypal整合方法
2010/11/28 PHP
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
CodeIgniter框架常见用法工作总结
2017/03/16 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
2017/09/11 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
微信小程序如何实现全局重新加载
2019/06/05 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
小结Python用fork来创建子进程注意事项
2014/07/03 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
《一株紫丁香》教学反思
2014/02/19 职场文书
菜篮子工程实施方案
2014/03/08 职场文书
和睦家庭事迹
2014/05/14 职场文书
财务会计专业自荐书
2014/06/30 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
新店开张宣传语
2015/07/13 职场文书
2016十一国庆节感言
2015/12/09 职场文书
深入理解python多线程编程
2021/04/18 Python
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python