用php代码限制国内IP访问我们网站


Posted in PHP onSeptember 26, 2015

利用淘宝的IP接口来判断IP,是否是国内的ip,是国内(CN)的就不允许访问。

$ip = $_SERVER['REMOTE_ADDR'];
$content = file_get_contents(‘http://ip.taobao.com/service/getIpInfo.php?ip='.$ip);
$banned = json_decode(trim($content), true);
$lan = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']);
if((!empty($banned['data']['country_id']) && $banned['data']['country_id'] == ‘CN') || strstr($lan, ‘zh'))
{
header(“HTTP/1.0 404 Not Found”);
echo ‘HTTP/1.0 404 Not Found';
exit;
}

同时发现一篇好文章:http://luhuang.sinaapp.com/redis-setnx/ 《Redis 来限制高并发 php代码实例》

Redis本质上也是一种键值数据库的,但它在保持键值数据库简单快捷特点的同时,又吸收了部分关系数据库的优点。从而使它的位置处于关系数据库和键值数据库之间。Redis不仅能保存Strings类型的数据,还能保存Lists类型(有序)和Sets类型(无序)的数据,而且还能完成排序(SORT) 等高级功能,在实现INCR,SETNX等功能的时候,保证了其操作的原子性,除此以外,还支持主从复制等功能。
Redis 来限制高并发
php代码实例

$redis->setnx(‘lock:hot_items', true)尝试创建一个key作为”锁”.若key已存在,setnx不会做任何动作且返回值为false,所以只有一个客户端会返回true值进入if语句更新缓存. 
$redis = new redis();
$redis_key = ‘lock:hot_items';
$clock_expire_time = $redis->get($redis_key);
if(!empty($clock_expire_time) && time() > intval($clock_expire_time))
{
//解除当前Redis锁
$redis->delete($redis_key);
}

if($redis->setnx($redis_key, time() + 3) !== true)
{
echo ‘高并发有冲突';
}

//操作你的代码, 同一时刻就一个人访问该代码了

//解除当前Redis锁
$redis->delete($redis_key);
PHP 相关文章推荐
聊天室php&mysql(二)
Oct 09 PHP
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
php长字符串定义方法
Jul 12 PHP
ThinkPHP中的关联模型注意点
Jun 16 PHP
PHP版微信公众平台红包API
Apr 02 PHP
Java中final关键字详解
Aug 10 PHP
编写PHP脚本来实现WordPress中评论分页的功能
Dec 10 PHP
Yii2中Restful API原理实例分析
Jul 25 PHP
php中get_magic_quotes_gpc()函数说明
Feb 06 PHP
PHP注释语法规范与命名规范详解篇
Jan 21 PHP
php的扩展写法总结
May 14 PHP
Laravel 5+ .env环境配置文件详解
Apr 06 PHP
十大使用PHP框架的理由
Sep 26 #PHP
PHP弹出对话框技巧详细解读
Sep 26 #PHP
ThinkPHP2.x防范XSS跨站攻击的方法
Sep 25 #PHP
ThinkPHP在Cli模式下使用模板引擎的方法
Sep 25 #PHP
腾讯CMEM的PHP扩展编译安装方法
Sep 25 #PHP
PHP生成随机字符串(3种方法)
Sep 25 #PHP
PHP防盗链的基本思想 防盗链的设置方法
Sep 25 #PHP
You might like
腾讯QQ微博API接口获取微博内容
2013/10/30 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
php中smarty实现多模版网站的方法
2015/06/11 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
jQuery循环遍历子节点并获取值的方法
2016/04/14 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
jquery+html仿翻页相册功能
2016/12/20 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
2017/07/14 Javascript
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
JavaScript 监听组合按键思路及代码实现
2020/07/28 Javascript
关于python的bottle框架跨域请求报错问题的处理方法
2017/03/19 Python
不可错过的十本Python好书
2017/07/06 Python
Python实现自动发送邮件功能
2021/03/02 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
方正Java笔试题
2014/07/03 面试题
优秀团员个人的自我评价
2013/10/02 职场文书
重阳节主题班会
2015/08/17 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android
Element实现动态表格的示例代码
2021/08/02 Javascript
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis