PHP丨实现禁止国外IP访问WP博客

/**
* WordPress 显示评论者IP归属地PHP函数
* https://24bp.cn/
**/
function aliuyun_getRealIp()
{
  $ip=false;
  if(!empty($_SERVER["HTTP_CLIENT_IP"])){
    $ip = $_SERVER["HTTP_CLIENT_IP"];
  }
  if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
    if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
    for ($i = 0; $i < count($ips); $i++) {
      if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
        $ip = $ips[$i];
        break;
      }
    }
  }
  return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}
 
function aliuyun_locate($ip) {
$ip=aliuyun_getRealIp();
    if(empty($ip)) $ip = get_comment_author_IP();
    $ch = curl_init();  
    $timeout = 5;  
    curl_setopt ($ch, CURLOPT_URL, 'http://ip.taobao.com/service/getIpInfo.php?ip='.$ip);  
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);  
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);  
    $file_contents = curl_exec($ch);  
    curl_close($ch);  
    $result = json_decode($file_contents,true);
    if ($result['data']['country'] != '中国') {
        wp_redirect( 'https://24bp.cn/' );
    } else {
        echo '<!-- 运营商是'.$result['data']['isp'].',IP是'.$ip.',禁止外国IP访问!! -->';
    }
}
add_action( 'wp_footer', 'aliuyun_locate' );

你只需将以上代码加入到主题中的function.php即可。刷新页面试试效果, 如果主题中出现那么恭喜你,封禁成功了!! 其中,wp_redirect( ‘https://24bp.cn/’ ); 可替换为wp_die(‘IP’, ‘IP!’, array(‘response’ => ‘503’)); 这样直接503,SEO也还行。如果不替换的话,国外IP访问全部跳转到 https://24bp.cn/这个链接自己修改即可。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

1 条评论
登录 后参与评论

相关文章

来自专栏容器云生态

根据红帽RHEL7官方文档对centos7进行技术剖析(二)

第一章 使用红帽kickstart,自动化安装rhel。 http://pan.baidu.com/s/1qWqfXlq    文档下载地址。 第二章: 控制对...

2707
来自专栏桥路_大数据

多云服务器kafka环境搭建并接收flume日志数据

3549
来自专栏Linyb极客之路

HTTPS安全最佳实践

HTTPS对于保护你的网站至关重要。但是你还需要避免许多陷阱 1. 没有混合内容

1113
来自专栏信安之路

渗透测试信息收集工具篇

如果知道目标的域名,你首先要做的就是通过 Whois 数据库查询域名的注册信息,Whois 数据库是提供域名的注册人信息,包括联系方式,管理员名字,管理员邮箱等...

890
来自专栏meteorzx

FTP错误详解及解决方案

这个问题在于你输入的网址有错误。有可能是你要连接的服务器不能识别你要求浏览的文档,或者你没有访问它的权利甚至它根本就是不存在的。仔细检查一下 你是否将网址写错,...

2046
来自专栏沈唁志

如何在CentOS 7上安装Asterisk

Asterisk是一个开源专用交换机(PBX)服务器,它使用会话发起协议(SIP)来路由和管理电话呼叫。值得注意的功能包括客户服务队列,待机音乐,电话会议和电话...

1733
来自专栏哎_小羊

windows上 nginx 配置代理服务,配置多域名,以及最简单实现跨域配置

Nginx,不用多说啦,大家都熟悉的不能再熟悉了,它是一款轻量级的高性能Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,最近在本地研究...

2649
来自专栏Python爬虫实战

用Python推送书籍到Kindle

以下科普内容来自:http://help.163.com/09/1223/14/5R7P6CJ600753VB8.html。

812
来自专栏coding

将vagrant的centos镜像扩容到800G准备阶段虚拟机内扩容大功告成

能做得了什么?这点容量撑不了几周就爆满。也许官方是出于轻便化的考量,但作为要在vagrant上搭建各种开发环境的开发人员,8G的容量只能让vagrant沦为鸡肋...

823
来自专栏mathor

第1章 必须掌握的Linux命令

 命令对象一般是指要处理的文件、目录、用户等资源,而命令参数可以用长格式(完整的选项名称),也可以用短格式(单个字母的缩写),两者分别用--与-作为前缀(示例请...

651

扫码关注云+社区