网上查到的解决方案都是一样的,不过那些设置只是前提。 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'];
- }
复制代码
上面生成的邮箱地址在进行用户信息保存时会验证,而验证的正则如下: 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';
- }
- }
复制代码
在网上找了一大堆还是报地址无效问题,只好自己看代码了,希望对有此问题的人有帮助,解决方案不对欢迎指教。
|