타오바오의 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);