检查用户头像状态的脚本

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

}
时间: 2024-10-10 09:06:40

检查用户头像状态的脚本的相关文章

检查HP服务器硬盘状态脚本

检查HP服务器硬盘状态脚本(如有问题则发邮件通知): # vi disk.sh 按a或i进入编辑模式 #!/bin/bash Name=`hostname` Date=`date +%m%d%y` Num=`dmidecode | grep -i 'serial number' | head -n 1` Disk=`hpacucli ctrl all show config | grep physicaldrive | awk -F[:" "]+ '{print $15}'` #ech

检查邮箱数据库状态并生成报表脚本

此脚本是群里面的哥们共享的,本人特整理出来分享给有需要的同学. 注意:1.使用前修改下里面的一些参数(原作者都贴心的标注了)2.有必要的话修改下脚本的执行策略 效果截图: 计划任务截图: 脚本内容: add-pssnapin microsoft.exchange* #加载EMS不然exchange命令无法识别 $Smtp="mail.demo.com"#需要修改的地方br/>$AdminEamil="[email protected],[email protected]

常用的监测系统状态shell脚本

#!/bin/bash ############################### #     系统状况分析脚本        # #                             # #用途:对系统CPU使用率.内存.# #网络连接.磁盘空间.系统进程 # #交易数量以及交易日志进行分析 # #适用操作系统:Linux          # #版本:1.0                    # #                             # #########

如何编写LVS对Real Server的健康状态检测脚本

简介:Linux 虚拟服务器(Linux Virtual Server. LVS),是一个由章文松开发的自由软件.利用KVS可以实现高可用的.可伸缩缩的Web, Mail, Cache和Medial等网络股务..井在此基 础上开发支持庞大用户数的,可伸缩的,高可用的电子商务应用.LVS1998年发展到现在,已经变得比较成熟,目前广泛应用在各种网络服务和电了商务应用 中.LVS具有很好的伸缩缩性.可靠性和管埋性,通过LVS要实现的最终目标是:利用linux 操作系统和LVS集群软件实现一个高可用.

Project Server 2013新手入门 (三)检查用户的有效权限

上篇文章里讲的怎么给PWA的用户来设置权限,那我们把用户的权限分配好了,怎么知道我们分配的权限对不对呢,或者说怎么去查看一个用户在PWA中的权限呢.下面的内容我将介绍怎么操作. 当我们配置完应该去检查一下用户的有效权限,这样可一方便我们管理用户. 1.同样是在"管理用户"页面,选中我们要查看的用户名称,点击"检查有效权限". 注意:我们也可以点击"停用用户"来阻止离职员工或者部分员工对PWA的使用,此时用户状态显示为"非活动"

Exchange2016将用户头像发布到全局地址列表(GAL)

以前我们介绍过如何在Exchange Server 2010中将用户头像发布到全局地址列表中的方法,现在最新的邮件系统已经到了Exchange Server 2016了,那我们来看看如何进行配置. 1.以管理员身份打开CMD命令提示符窗口,输入,如下图所示: 2.打开MMC控制台窗口,添加Active Directory架构,如下图所示: 3.在下图所示页面中,右键thumbnailphoto,选择属性. 4.检查如下内容是否被选中. 5.将员工照片存储在邮件服务器中,大小不能超过10K,如下图

Android--利用相机或相册截取用户头像(解决了miui无法截取,以及部分机型拍照无返回Uri)

声明 本文的Demo可用于从本地获取用户头像时使用,解决了有些手机系统相机拍照后获取不到拍摄照片的问题,以及解决小米miui系统调用系统裁剪图片功能camera.action.CROP后崩溃或重新打开app的问题. 修改了部分机型拍照后返回的是缩略图的临时文件的问题. 如何获得一张原图 先看代码: UtilClass.requestPermission(ChangeMyDataActivityCopy.this, android.Manifest.permission.CAMERA); choo

LVS自动化添加及删除ipvsadm和后端服务器健康状态检测脚本

  LVS director 负载均衡器增加IPVSADM脚本 #vim director.sh #!/bin/bash #chkconfig: - 88 66 #description: this script to add lvs IP VIP=192.168.0.254 DIP=192.168.0.100 RIP1=192.168.0.101 RIP2=192.168.0.102 PORT=80 SCHELE=wrr LOCKFILE=/var/lock/subsys/ipvsadm ca

Silverlight项目笔记6:Linq求差集、交集&amp;检查网络连接状态&amp;重载构造函数复用窗口

一.使用Linq求差集.交集 使用场景: 需要从数据中心获得用户数据,并以此为标准,同步系统的用户信息,对系统中多余的用户进行删除操作,缺失的用户进行添加操作,对信息更新了的用户进行编辑操作更新. 所以需要通过对数据中心以及系统现有用户信息进行比较,分为三部分: (1) Linq取差集,找出需要删除的用户数据,进行删除(USERNAME为唯一值字段). 使用的是Except这个方法. (2)使用Linq提供的Intersect方法,取得两个用户集合的交集,遍历检查进行更新. (3)同样再次取差集