> 백엔드 개발 > PHP 튜토리얼 > PHP 코드를 사용하여 당사 website_php 기술에 대한 국내 IP 액세스를 제한하십시오.

PHP 코드를 사용하여 당사 website_php 기술에 대한 국내 IP 액세스를 제한하십시오.

WBOY
풀어 주다: 2016-05-16 20:07:25
원래의
1120명이 탐색했습니다.

타오바오의 IP 인터페이스를 이용해 해당 IP가 국내(CN) IP인지 확인하세요.

$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/ "고동시성 PHP 코드 예제를 제한하는 Redis"

Redis는 기본적으로 키-값 데이터베이스이지만 키-값 데이터베이스의 단순성과 속도를 유지하면서 관계형 데이터베이스의 장점도 일부 흡수합니다. 따라서 그 위치는 관계형 데이터베이스와 키-값 데이터베이스 사이에 있습니다. Redis는 Strings 유형의 데이터뿐만 아니라 Lists 유형(순서가 지정된) 및 Set 유형(순서가 지정되지 않음) 데이터도 저장할 수 있으며 정렬(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.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿