基于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 获取MSN好友列表的代码(2009-05-14测试通过)
Sep 09 PHP
php数据库抽象层 PDO
May 07 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
Oct 23 PHP
linux下实现定时执行php脚本
Feb 13 PHP
php使用GD创建保持宽高比缩略图的方法
Apr 17 PHP
PHP上传图片类显示缩略图功能
Jun 30 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
Dec 27 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
Feb 25 PHP
php利用fsockopen GET/POST提交表单及上传文件
May 22 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
PHP读取文件或采集时解决中文乱码
Mar 09 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
JSQL  一个 web DB 的封装
2010/05/05 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
2019/05/10 Javascript
nodejs对项目下所有空文件夹创建gitkeep的方法
2019/08/02 NodeJs
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
Python调用C# Com dll组件实战教程
2017/10/12 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
Pyqt5自适应布局实例
2019/12/13 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
读群众路线心得体会
2014/03/07 职场文书
2014国庆节国旗下演讲稿(精选版)
2014/09/26 职场文书
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
2014年纪委工作总结
2014/12/05 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis