2013-04-28 2 views
0

특정 페이지의 조회수를 계산하는 웹 사이트 프로젝트가 있습니다. 이러한보기를 IP 주소와 날짜로 저장하므로 사용자가 해당 페이지에서 여러 번 클릭 할 경우을 한 번만 계산합니다.IP 주소를 ADDRESS로 변환하는 데 너무 많은 시간이 걸립니다.

내가 검색 로봇을 내 웹 사이트에 액세스 할 때 실제 사용자가 으로 계산하지 않도록하고 싶습니다.

나는 보통 실제 주소로 IP를 변환 등과 같은 문자열을 비교하여 다른 사이트에이 일을하고있어

는 등

'구글'하지만 실제 주소 로 변환 때로는 3-4초을 걸립니다 내 웹 사이트를 더 느리게 만듭니다.

이 문제를 어떻게 해결할 수 있습니까?

UPDATE

$global_bots = array("bot", "slurp", "spider", "crawl", "archiver", "facebook"); 

//이 변수가 위의 포함되어있는 내 전역 설정 파일에 간다 (답 기준) 좀 더 솜을 연구하고 나는이 간단한 해결책을했다 내 모든 파일

$user_agent = $_SERVER['HTTP_USER_AGENT']; 

$bot_count = 0; 
do{ 
    $pos = stripos($user_agent, $global_bots[$bot_count]); 
    $bot_count++; 
}while($pos===false && ($bot_count < count($global_bots))); 

if($pos!==false){ 
    //check if user already clicked today on this page, else record his ip 
}else{ 
    //don't record it, it's mostly a BOT 
} 

이에 다른 업데이트, 등이있는 경우 문자열이 봇에서 발견되면 빠른 답을 얻어 부담없이 뛰어 들어보십시오.

감사합니다.

+3

Google IP 주소를 확인해야하는 이유는 무엇입니까? Googlebot은 User-Agent 헤더에서 자신을 식별하며 Google은 실제로 실제 인간뿐만 아니라 봇을 고용합니다. –

+0

사용자 에이전트가 봇으로 알려주는 것 외에도 (가장 좋은 스파이더가 그렇게 함), 나중에 비동기식 cron 작업에서 IP를 DNS 이름으로 변환 할 수 있습니다. – Wrikken

+0

봇은 입력 내용을 채우려 고 시도합니다. 입력 내용이 숨겨져 있다면 인간은 할 수 없습니다. –

답변

0

잘 행동하는 봇은 /robots.txt 경로를 먼저 요청하지만 사람은 일반적으로 요청하지 않습니다. 따라서 먼저이 경로를 요청한 User-Agents를 찾아서 봇을 식별 할 수 있습니다.

2

이것은 "변환"이 아닙니다 (수학의 의미에서) : 외부 데이터베이스 (DNS 서버)에 대한 조회입니다. 다른 외부 서비스 조회와 동일한 규칙을 사용해야합니다.

  • 결과를 저장하면 다시 쿼리 할 필요가 없습니다.
  • 작업을 명령 줄 크론 작업으로 연기 할 수 있습니다 (방문자 통계는 일반적으로 실시간으로 처리 할 필요가 없습니다). 당신이 알게되면

, 내 겸손 조언은 당신이 그것을 할 수 없다는 것입니다 :

  • 어떻게 컴파일하고 괜찮은 데이터베이스를 유지 관리 할 계획입니까? 밖에는 수백만 명의 크롤러가 있어야합니다.
  • 크롤러가 항상 공인 IP 주소를 가진 전용 서버에서 실행된다고 가정합니다. 이는 사실이 아닙니다.

(비 제외) 봇은 구별하기 위해 접근 보통 :

  • 사용자 에이전트 문자열 당신은 아마 사용자 에이전트 데이터베이스를 빌릴 수 있습니다 자바 스크립트

를 실행하는

  • 능력 (또는 심지어 사용자 에이전트 탐지 라이브러리).

  • 관련 문제