码迷,mamicode.com
首页 > 其他好文 > 详细

检查用户头像状态的脚本

时间:2015-01-16 16:10:18      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

<?php
$_SERVER[‘HTTP_HOST‘] = ‘‘;
$fromUid = isset($GLOBALS[‘argv‘][3]) && (intval($GLOBALS[‘argv‘][3]) == $GLOBALS[‘argv‘][3]) ? $GLOBALS[‘argv‘][3] : 0;
$limitNum = isset($GLOBALS[‘argv‘][4]) && (intval($GLOBALS[‘argv‘][4]) == $GLOBALS[‘argv‘][4]) ? $GLOBALS[‘argv‘][4] : 0;
$onlyUpdateCheckedHasAvatar = isset($GLOBALS[‘argv‘][5]) && (intval($GLOBALS[‘argv‘][5]) == 1) ? 1 : 0;
$newLogFile = isset($GLOBALS[‘argv‘][6]) && (intval($GLOBALS[‘argv‘][6]) == 1) ? 1 : 0;
define(‘FROMUID‘, $fromUid);
define(‘LIMITNUM‘, $limitNum);
define(‘ONLY_UPDATE_CHECKED_HASAVATAR‘, $onlyUpdateCheckedHasAvatar);
define(‘NEW_LOGFILE‘, $newLogFile);

/**
 * CheckUserAvatarStatus.class.php
 * 2015-1-16 
 */

/**
 * 检查用户头像状态 > 临时文件  有差异的用户列表:用户Uid,  数据库中用户头像状态, 检查头像状态结果, 用户头像地址
 * 更新用户头像状态 < 临时文件 - 有差异的用户列表
 */
class CheckUserAvatarStatus extends Controller {

    protected $objDCommonMember;
    protected $avatarHost;
    protected $fromUid; // 开始检查的用户Uid, 按Uid倒序排列检查数据
    protected $limitNum; // 限制查查的个数
    protected $pageSize;
    protected $checkLocalAvatar; // 1: 检查服务器上的avatar是否存在,2 : 还是url远程请求检查avatar是否存在
    protected $diffLogFile;
    protected $onlyUpdateCheckedHasAvatar; // 仅仅更新原avatarstatus=0, 但检查用户头像存在的用户的头像状态
    protected $newLogfile;

    public function __construct() {
        $this->objDCommonMember = new \BBS\Dao\CommonMember();
        $this->avatarHost = ‘http://xxx.com/‘;
        $this->fromUid = FROMUID;
        $this->limitNum = LIMITNUM;
        $this->onlyUpdateCheckedHasAvatar = ONLY_UPDATE_CHECKED_HASAVATAR;
        $this->pageSize = 50;
        $this->checkLocalAvatar = 2;
        $this->diffLogFile = ‘/tmp/check_user_avatarstatus_diff.txt‘;
        $this->newLogfile = NEW_LOGFILE;
    }

    public function doDefault() {
        echo ‘nothing‘;
        exit();
    }

    public function doCheckUserAvatarStatus() {
        if($this->newLogfile) {
            @unlink($this->diffLogFile);
        }        
        $limitNum = $this->limitNum;
        if ($limitNum) {
            $this->_echo_msg(‘Limit num ‘ . $limitNum);
        } else {
            $this->_echo_msg(‘No Limit num ‘);
        }
//        sleep(2);
        $condition = ‘‘;
        if ($this->fromUid)
            $condition .= ‘uid < ‘ . $this->fromUid;
        $total = $this->objDCommonMember->fetchOne($condition, ‘count(*)‘);
        $total = $total ? array_pop($total) : 0;
        $this->_echo_msg(‘Total num ‘ . $total);
        if (!$total)
            exit();

        $pages = ceil($total / $this->pageSize);
        $count = 0;
        for ($i = 0; $i < $pages; $i++) {
            $limit = $i * $this->pageSize . ‘,‘ . $this->pageSize;
            $datas = $this->objDCommonMember->findBy($condition, $limit, $limit, ‘uid, username, avatarstatus‘, ‘uid desc‘);
            foreach ($datas as $userInfo) {
                $this->_echo_msg(‘check user ‘ . $userInfo[‘uid‘]);
                list($avatarStatus, $avatarUrl) = $this->_checkAvatarStatus($userInfo[‘uid‘], $userInfo[‘avatarstatus‘]);
                if ($avatarStatus != $userInfo[‘avatarstatus‘]) {
                    $this->_writeDiffFile($userInfo, $avatarStatus, $avatarUrl);
                }
                $count++;
                if ($this->limitNum && $count > $this->limitNum) {
                    $this->_echo_msg(‘reach Limit num ‘ . $this->limitNum);
                    exit();
                }
                $this->_echo_msg(‘counter ‘ . $count .‘/‘ . $total);
            }
        }
    }

    /**
     * 根据差异文件,修改用户的头像状态 - 只更新原avatarstatus=0,但用户有头像的用户
     */
    public function doUpdateUserAvatarStatus() {
        $logRows = file($this->diffLogFile);
        $logRows = array_unique($logRows);
        $logRows = array_filter($logRows);
        $pages = ceil(count($logRows) / $this->pageSize);
        for ($i = 0; $i < $pages; $i++) {
            $datas = array_slice($logRows, $i * $this->pageSize, $this->pageSize);
            $has_uids = $hasno_uids = array();
            foreach ($datas as $value) {
                $tmpVal = explode("\t", $value);
                if ($tmpVal[2] == ‘1‘) {
                    $has_uids[] = $tmpVal[0];
                } else {
                    $hasno_uids[] = $tmpVal[0];
                }
            }
            if (!empty($has_uids)) {
                $return = $this->objDCommonMember->update(array(‘avatarstatus‘ => 1), array(‘uid‘ => $has_uids, ‘avatarstatus‘ => 0));
                $this->_echo_msg(‘update user avatarstatus=1 return ‘ . $return . "\n" . implode(‘,‘, $has_uids));
            }            
            if(!$this->onlyUpdateCheckedHasAvatar) {
                if (!empty($hasno_uids)) {
                    $return = $this->objDCommonMember->update(array(‘avatarstatus‘ => 0), array(‘uid‘ => $hasno_uids, ‘avatarstatus‘ => 1));
                    $this->_echo_msg(‘update user avatarstatus=0 return ‘ . $return . "\n" . implode(‘,‘, $hasno_uids));
                }
            }
        }
    }

    /**
     * 头像状态不一致的,添加文件记录 -  只更新原avatarstatus=0,但用户有头像的用户
     */
    private function _writeDiffFile($userInfo, $avatarStatus, $avatarUrl) {
        $str = $userInfo[‘uid‘] . "\t" . $userInfo[‘avatarstatus‘] . "\t" . $avatarStatus . "\t" . $avatarUrl . "\n";
        $return = file_put_contents($this->diffLogFile, $str, FILE_APPEND);
        $this->_echo_msg(‘add diff avatarstatus log return ‘ . $return);
    }

    private function _checkAvatarStatus($uid, $old_avatarstatus) {
        $avatarUrl = $this->_getAvatarUrl($uid);
        $keepOld = false;
        if ($this->checkLocalAvatar == 1) {
            $avatarDir = $this->_getAvatarDir($uid);
            $this->_echo_msg(‘avatarDir ‘ . $avatarDir);
            $return = file_exists($avatarDir);
        } else {
            $this->_echo_msg(‘avatarUrl ‘ . $avatarUrl);
            $requestData = $this->curlRequest($avatarUrl);
            if (!empty($requestData) && $requestData[1][‘size_download‘] == 4182) { //默认小图大小
                $keepOld = true;
            }
            $return = !empty($requestData) ? 1 : 0;
        }
        $checkAvatarStatus = $return ? 1 : 0;
        // 只记录检查有头像的log
        if ($this->onlyUpdateCheckedHasAvatar && $checkAvatarStatus == 0) {
            $keepOld = true;
        }
        if ($keepOld) {
            $checkAvatarStatus = $old_avatarstatus;
            $this->_echo_msg(‘Keep Old avatar status ‘ . $old_avatarstatus);
        } else {
            $this->_echo_msg(‘avatar status ‘ . $checkAvatarStatus . ‘ old avatarstatus ‘ . $old_avatarstatus);
        }
        return array($checkAvatarStatus, $avatarUrl);
    }

    private function _getAvatarUrl($uid) {
        $size = ‘small‘;
        $uid = abs(intval($uid));
        $uid = sprintf("%09d", $uid);
        $dir1 = substr($uid, 0, 3);
        $dir2 = substr($uid, 3, 2);
        $dir3 = substr($uid, 5, 2);
        $typeadd = ‘‘;
        return $this->avatarHost . $dir1 . ‘/‘ . $dir2 . ‘/‘ . $dir3 . ‘/‘ . substr($uid, -2) . $typeadd . "_avatar_$size.jpg";
    }

    private function _getAvatarDir($uid) {
        $size = ‘small‘;
        $uid = abs(intval($uid));
        $uid = sprintf("%09d", $uid);
        $dir1 = substr($uid, 0, 3);
        $dir2 = substr($uid, 3, 2);
        $dir3 = substr($uid, 5, 2);
        $typeadd = ‘‘;
        return ‘/xxx/uc_server/data/avatar/‘ . $dir1 . ‘/‘ . $dir2 . ‘/‘ . $dir3 . ‘/‘ . substr($uid, -2) . $typeadd . "_avatar_$size.jpg";
    }

    /**
     * curl获取指定路径内容
     */
    private function curlRequest($url, $method = ‘‘, $postdata = ‘‘, $isjson = 0) {
        $ch = curl_init();
        $post = $method && strtolower($method) == ‘post‘ ? 1 : 0;
        curl_setopt($ch, CURLOPT_URL, $url);
        if ($post) {
            curl_setopt($ch, CURLOPT_POST, $post);
            if ($postdata) {
                if (!$isjson) {
                    $postdata = http_build_query($postdata);
                }
                curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
            }
        }
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
        curl_setopt($ch, CURLOPT_TIMEOUT, 80);
        if ($isjson) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                ‘Content-Type:application/json‘,
                ‘Content-Length:‘ . strlen($postdata)
            ));
        }
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");
        $data = curl_exec($ch);
        $datainfo = curl_getinfo($ch);
        curl_close($ch);
        if ($datainfo[‘http_code‘] == 200) {
            return array($data, $datainfo);
        } else {
            return array();
        }
    }

    public function run() {
        $action = $this->action;
        $this->$action();
    }

}

 

检查用户头像状态的脚本

标签:

原文地址:http://www.cnblogs.com/bandbandme/p/4228860.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!