用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获得文件扩展名三法
Nov 25 PHP
PHP用mysql数据库存储session的代码
Mar 05 PHP
php 格式化数字的时候注意数字的范围
Apr 13 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
怎样使用php与jquery设置和读取cookies
Aug 08 PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 PHP
php实现QQ空间获取当前用户的用户名并生成图片
Jul 25 PHP
thinkPHP分页功能实例详解
May 05 PHP
PDO::rollBack讲解
Jan 29 PHP
浅谈laravel orm 中的一对多关系 hasMany
Oct 21 PHP
PHP实现获取文件mime类型多种方法解析
May 28 PHP
PHP的重载使用魔术方法代码实例详解
Feb 26 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
php入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
PHP多文件上传类实例
2015/03/07 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
jQuery插件pagination实现分页特效
2015/04/12 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
[59:26]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第二局
2016/02/28 DOTA
TensorFlow Session会话控制&Variable变量详解
2018/07/30 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
C#实现启动一个进程
2016/10/01 面试题
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
教师求职推荐信范文
2013/11/20 职场文书
党校培训思想汇报
2014/01/03 职场文书
劳模先进事迹材料
2014/12/24 职场文书
2015个人简历自我评价语
2015/03/11 职场文书
初一语文教学反思
2016/03/03 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server