在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,可能参照网上其它要领,譬喻,找到以下代码:
$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 下载:
Discuz! X2 R20120628 简体GBK下载