首页 > 代码库 > 检查用户头像状态的脚本

检查用户头像状态的脚本

<?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();    }}

 

检查用户头像状态的脚本