公司网站之前的用户头像是存储在自己的服务器,后来管理不便,新增用户头像上传到七牛,为了方便管理,数据统一,领导说把本地服务器的头像全部迁移到七牛。
1.梳理下思路
先判断用户的头像是否在七牛,若不存在,本地如果有则抓取到七牛,然后进行批量抓取
2.七牛判断图片是否存在
1/**2* 查看七牛url是否存在3* @param string $url4*/5functionurl_exists($url) {6require_once(COMMON_PATH."qiniu/rs.php");7require_once(COMMON_PATH."qiniu/http.php");8$parts=parse_url($url);9$bucket;//桶10$key=substr($parts['path'], 1);//七牛文件名11//密钥12$accessKey;13$secretKey;14Qiniu_SetKeys($accessKey,$secretKey);15$client=newQiniu_MacHttpClient(null);16list($ret,$err) = Qiniu_RS_Stat($client,$bucket,$key);//查看单个文件信息17if($err!==null) {18returnfalse;19}else{20returntrue;21}22}
3.移动单个文件到七牛
1/**2* 移动单个头像到七牛3* @param string $remotePath 远程文件在服务器上的物理地址4* @param string $qiniuPath 七牛文件地址5*/6functiononeFetch($remotePath,$qiniuPath){7if(!$this->url_exists($qiniuPath) &&file_exists($remotePath)){8require_once(COMMON_PATH."qiniu/rs.php");9require_once(COMMON_PATH."qiniu/http.php");10require_once(COMMON_PATH."qiniu/conf.php");1112$client=newQiniu_MacHttpClient(NULL);13/*$accessUrl 远程文件访问地址14*$bucket桶15*$key 存储在七牛的文件名16*/17$ret= Qiniu_RS_Fetch($client,$accessUrl,$bucket,$key);1819if($ret!=NULL)20{21$errlog= 'fail.log';//写错误日志22file_put_contents($errlog, "{$key}\n",FILE_APPEND);23}24else25{26var_dump($ret);27}28}else{29var_dump('已有头像');30}3132}
4.批量抓取
functiont(){header("Content-type: text/html; charset=utf-8");set_time_limit(0);$start=intval($_GET['num']);//开始位置$str= '';/*从数据库查询记录*/$link=MySQL_connect("localhost", "root", "root") ordie("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) ordie(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);
}