基于php实现七牛抓取远程图片


Posted in PHP onDecember 01, 2015

由于公司网站之前的用户头像都是存储在自己的服务器上的,后来感觉管理不方便,新增加的用户头像都上传到了七牛,为了方便统一管理,领导说把本地服务器的头像全部迁移到了七牛。

1.梳理下思路

先判断用户的头像是否在七牛,若不存在,本地如果有则抓取到七牛,然后进行批量抓取

2.七牛判断图片是否存在

/**
    * 查看七牛url是否存在
    * @param string $url
    */
   function url_exists($url) {
     require_once(COMMON_PATH."qiniu/rs.php");
     require_once(COMMON_PATH."qiniu/http.php");
     $parts=parse_url($url);
     $bucket ;//桶
     $key=substr($parts['path'], );//七牛文件名
    //密钥
     $accessKey ; 
     $secretKey ;
     Qiniu_SetKeys($accessKey, $secretKey);
     $client = new Qiniu_MacHttpClient(null);
     list($ret, $err) = Qiniu_RS_Stat($client, $bucket, $key);//查看单个文件信息
     if ($err !== null) {
       return false;
     } else {
       return true;
     }
   }

3.移动单个文件到七牛

/**
    * 移动单个头像到七牛
    * @param string $remotePath 远程文件在服务器上的物理地址
    * @param string $qiniuPath 七牛文件地址
    */
   function oneFetch($remotePath,$qiniuPath){
     if(!$this->url_exists($qiniuPath) && file_exists($remotePath)){
       require_once(COMMON_PATH."qiniu/rs.php");
       require_once(COMMON_PATH."qiniu/http.php");
       require_once(COMMON_PATH."qiniu/conf.php");
       $client = new Qiniu_MacHttpClient(NULL);
       /*$accessUrl 远程文件访问地址
       *$bucket桶
       *$key 存储在七牛的文件名
       */
       $ret = Qiniu_RS_Fetch($client,$accessUrl, $bucket, $key);
       if($ret != NULL)
       {
         $errlog = 'fail.log';//写错误日志
         file_put_contents($errlog,  "{$key}\n", FILE_APPEND);
       }
       else
       {
         var_dump($ret);
       }
     }else{
       var_dump('已有头像');
     }
   }

4.批量抓取

function t(){
    header("Content-type: text/html; charset=utf-8");
    set_time_limit(0);
    $start = intval($_GET['num']);//开始位置
    $str = '';
    /*从数据库查询记录*/
    $link = mysql_connect("localhost", "root", "root") or die("error");
    $db_selected = mysql_select_db("test", $link);
    mysql_query ("SET NAMES UTF8");
    $limit = 10;//每次查询数
     $sql = "SELECT * FROM test order by id desc limit {$start},{$limit}"; 
     $result = mysql_query($sql) or die(mysql_error());
    if(mysql_num_rows($result))
    {
      while($row=mysql_fetch_assoc($result)){
          oneFetch($row['remotePath'], $row['qiniuPath']);
      }  
      $start += 10;
      $url = "/t?num={$start}";
      $str = '已经更新'.$start.'条<br />';
      $str .= '<script>location.href="'.$url.'";</script>';//更新$limit条,跳转防止脚本无响应
    }
    else
    {
      echo '结束';
    } 
    echo $str;
    ob_flush();
    flush();
    sleep(2);
    unset($sql,$result,$row);
  }

以上内容是基于php实现七牛抓取远程图片的全部内容,希望大家喜欢。

PHP 相关文章推荐
php中文件上传的安全问题
Oct 09 PHP
修改了一个很不错的php验证码(支持中文)
Feb 14 PHP
php 3行代码的分页算法(求起始页和结束页)
Oct 21 PHP
解析左右值无限分类的实现算法
Jun 20 PHP
php用正则表达式匹配URL的简单方法
Nov 12 PHP
PHP反向代理类代码
Aug 15 PHP
php实现约瑟夫问题的方法小结
Mar 23 PHP
php parse_str() 函数的定义和用法
May 23 PHP
PHP Oauth授权和本地加密实现方法
Aug 12 PHP
php递归函数怎么用才有效
Feb 24 PHP
PHP7内核CGI与FastCGI详解
Apr 14 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
Oct 18 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 #PHP
深入解析PHP中foreach语句控制数组循环的用法
Nov 30 #PHP
简单了解PHP编程中数组的指针的使用
Nov 30 #PHP
PHP 微信支付类 demo
Nov 30 #PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
Nov 30 #PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
Nov 30 #PHP
PHP curl模拟登录带验证码的网站
Nov 30 #PHP
You might like
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
第十二节--类的自动加载
2006/11/16 PHP
PHP HTML代码串 截取实现代码
2009/06/29 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
JavaScript 学习笔记一些小技巧
2010/03/28 Javascript
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
微信小程序 页面跳转传参详解
2016/10/28 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
Python科学计算环境推荐——Anaconda
2014/06/30 Python
列举Python中吸引人的一些特性
2015/04/09 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
python远程调用rpc模块xmlrpclib的方法
2019/01/11 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
django有哪些好处和优点
2020/09/01 Python
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
Weblogic的布署方式
2013/08/23 面试题
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
企业法人授权委托书范本
2014/09/23 职场文书