网上查到的解决方案都是一样的,不过那些设置只是前提。
1,
首先在后台--全局--注册与访问--注册-"取消注册邮箱必填"选择是提交
2,
然后编辑
template\default\member\register.htm
删除以下代码即可,如果没改过这个文件,是151-159行。也可以直接把必填项的条件判断加到这一段代码上,如下图。
按照上面二步操作,在注册页面的会不显示邮箱输入,但是提交时会提示“Email 地址无效”,原因是:如果不提交邮箱,DISCUZ会生成一个邮箱地址保存,
upload/source/class/class_member.php 612行
if(empty($email) && $_G['setting']['forgeemail']) {
$_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST'];
}
在本地运行discuz时,$_SERVER['HTTP_HOST']一般是localhost,生成的邮件地址就是 xjsixj@localhost,如果部署后网站有域名例:www.bbsks.com,则生成的邮件地址是 xjsixj@www.bbsks.com
上面生成的邮箱地址在进行用户信息保存时会验证,而验证的正则如下:
upload/uc_client/modle/user.php 92行
通过生成的地址与上面的正则比较就会发现,如果是xjsixj@localhost 肯定是通不过验证,也就会报“Email 地址无效”的错误。
这个问题没有什么修改的必要,如果实在要修改,只要对$_SERVER['HTTP_HOST']判断里面有没有(\.\w+)+,
解决方案如下,修改:
upload/source/class/class_member.php 612行
if(empty($email) && $_G['setting']['forgeemail']) {
$_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST'];
}
上面的代码换成如下:
if(empty($email) && $_G['setting']['forgeemail']) {
if(preg_match("/^[\w\-\.]+(\.\w+)+$/", $_SERVER['HTTP_HOST'])){
$_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST'];
}else{
$_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST'].'.com';
}
}
在网上找了一大堆还是报地址无效问题,只好自己看代码了,希望对有此问题的人有帮助,解决方案不对欢迎指教。