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 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

MySQL数据库数据迁移到SQLserver

1511
来自专栏沃趣科技

配置表 | 全方位认识 sys 系统库

在上一篇《初相识 | 全方位认识 sys 系统库》中,我们针对sys 系统库做了一个不痛不痒的开端,是不是觉得太简单了?别急,本期我们将为大家带来系列第二篇《配...

1383
来自专栏沃趣科技

MySQL8.0之数据字典

MySQL 8.0 将数据库元信息都存放于InnoDB存储引擎表中,在之前版本的MySQL中,数据字典不仅仅存放于特定的存储引擎表中,还存放于元数据文件、非事务...

5649
来自专栏安恒网络空间安全讲武堂

hackme.inndy.tw的19道web题解(上)

目录 写在前面... hide and seek. guestbook. LFI .homepage. ping. scoreboard. log...

64210
来自专栏淡定的博客

sql注入入门学习(数字型)(连载中)

在MySQL中,表名存放在information_schema数据库下tables表table_name字段中、查表名我们主要用到的是TABLES表

3324
来自专栏杨建荣的学习笔记

关于自动化平台的动态菜单设计

最近几天是马不停蹄的做一些事情,今天计划把通用功能的部分先改进一些,比如说菜单的权限配置。目前使用的方案是用户可以看到所有的菜单,如果没有权限,则返回一个权限不...

4434
来自专栏数据和云

【动手实践】Oracle 12.2 新特性:自动的列表分区创建

2017年来了,我们要启动新的学习征程了。在过去我们一直思考,什么样的内容能够更帮助大家了解和学习到有用的知识? 这个『动手实践』栏目就是这样一个改进和尝试吧,...

2986
来自专栏用户画像

mysql 模拟四

1.如果一个MySQL的版本号没有后缀,表示该版本已经在很多地方运行一段时间了,而且没有非平台特定的错误报告。我们通常称之为___稳定__版。 

1125
来自专栏清风

MySQL数据库 原

其中“/yourpath/crontab_mysql.sql”为需要执行的sql语句。

983
来自专栏乐沙弥的世界

父游标、子游标及共享游标

        游标是数据库领域较为复杂的一个概念,因为游标包含了shared cursor和session cursor。两者有其不同的概念,也有不同的表现形...

723

扫码关注云+社区

领取腾讯云代金券