• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

织梦吧 - dedecms,网站模板,建站教程,图片素材免费下载

DedeCMS视频教程
当前位置: 织梦吧 > CMS教程 > discuz教程 >

Discuz! x2 启用强制上传头像无效的分析

来源: www.dedecms8.com 编辑:织梦吧 时间:2011-10-17点击:

  在Discuz! x2中强制上传头像往往会作为站长防灌水和引导用户完善资料的手段,之前有部分站长提出自己的网站设置强制上传头像无效,上传头像后,依然提示需要上传。现在对这部分功能做一下分析,看看问题出在哪。

  打开Discuz! x2后台,在全局防灌水基本设置中,可以开启“强制新用户上传头像”,开启后,setting表中need_avatar字段的值变为“1”。这时新注册的用户如果需要进行发帖回复等操作,没进行头像上传的,应该会提示上传头像。例如进行发帖操作,会调用forum_post.php文件中的cknewuser();函数对用户进行验证,cknewuser();function_core.php中定义,其中大约3160行有对头像的验证,我们看看验证的条件:

 
if($_G['setting']['need_avatar'] && empty($ckuser['avatarstatus'])) {
                   if(empty($return)) showmessage('no_privilege_avatar', '', array(), array('return' => true));
                   $result = false;
         }

   首先看看setting表中是否有need_avatar值,即是否需要验证强制上传头像,并且验证用户member表中的avatarstatus字段是否有值,即这个用户是否上传过头像,上传过值为1,否,则值为0,从这里看,如过设置过需要进行强制上传头像,那么,setting表中need_avatar字段值应该是有的,如果还提示需要上传,则说明member表中的头像状态值为0,下面我们看看这个状态值怎么来的。

  我们从上传头像开始,上传头像需要的文件为spacecp_avatar.php

 
if(empty($space['avatarstatus']) && uc_check_avatar($_G['uid'], 'middle')) {
         DB::update('common_member', array('avatarstatus'=>'1'), array('uid'=>$_G['uid']));
         updatecreditbyaction('setavatar');
         manyoulog('user', $_G['uid'], 'update');
}

  我们只对部分代码进行分析,这段代码的作用是,上传了头像后,判断这个用户是否上传过头像,即有没有avatarstatus值,并且用 uc_check_avatar检查用户头像是否存在,这个uc_check_avatar函数用到了uc_fopen2函数,uc_fopen2函数用 到几个参数,其中就有UCenter的配置文件中的Ip,host,如果用户对其hosts文件进行过修改,或留空且域名解析有问题,都会造成 uc_fopen2函数返回值不为1,不为1的情况下,造成上一段代码条件不成立,进而没有对common_member表的avatarstatus值 进行update更新操作,那么也就造成一直提示用户需要上传头像。
解决方法:一个是可以填写服务器真实IP,或者参照网上其它方法,例如,找到以下代码:

 
function uc_check_avatar($uid, $size = ‘middle’, $type = ‘virtual’) {
$url = UC_API./avatar.php?uid=$uid&size=$size&type=$type&check_file_exists=1;
$res = uc_fopen2($url, 500000,,, TRUE, UC_IP, 20);
if($res == 1) {
return 1;
} else {
return 0;
}
}

改成:

 
function uc_check_avatar($uid, $size = ‘middle’, $type = ‘virtual’) {
        $url = UC_API./avatar.php?uid=$uid&size=$size&type=$type&check_file_exists=1;
        @$file_exists = trim(uc_fopen2(UC_API./avatar.php?uid=$uid&check_file_exists=1));
    return $file_exists;
}

直接进行头像文件存在与否的判断。

标签: Discuz! x2
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 tom@tiptop.cn ,  QQ