Crazy 로그는 시간, 날짜 통계 뿐 아니라 기기나 OS, 경로 등을 통계로 볼 수 있습니다.

Log 에서 필요한 library 는 다음과 같습니다.

  1. get_Browser.php
    Log 프로그램을 담당합니다.
  2. globals_filter.php
    _SERVER 전역 변수를 필터링합니다.
  3. examples/before-log

설치 순서는 다음과 같습니다.

기본적으로 crazy 스크립트는 library 에 속한 파일 외에는 수정이 자유롭습니다.
물론 필요에 의해서 수정은 되나 차후 업그레이드가 필요한 때에는 library 파일만을 업데이트하기 때문에 가급적 수정을 하지 않거나 수정한 부분이 있다면 따로 표시해 주시기 바랍니다.

  1. 다운로드 받은 파일을 서버로 모두 업로드합니다.
  2. logs 디렉토리의 권한(또는 퍼미션)을 707, 757, 777 중 하나로 변경합니다.

환경 설정

공통 상수

  • HABONYPHP_DIRNAME
    						
    web log가 설치된 경로. 끝에 반드시 / 를 입력해 주세요.
    
    기본값: ./
  • HABONYPHP_USERLOGNAME
    						
    로그 디렉터리 이름.
    
    기본값: log

사용 가능한 상수

  • PHP_LOG_PHP_BROWSCAP_URL
    						
    browscap 이 위치하는 경로나 디렉터리 이름.
    
    기본값: data-text
  • PHP_LOG_EVASION_IP
    						
    카운터에서 제외할 IP. 공백으로 다수 설정합니다.
    
    ex. 127.0.0.1 ::1
  • PHP_LOG_PREVIOUS_STATISTICS
    						
    검색으로 통계를 불러올 년도. 허용 문자: [0-9 -]
    
    ex. index.php?dictate=2013
  • PHP_LOG_TIME_LIMIT
    					
    카운터 유지 시간.
    
    기본 값: 30(분). (0 은 사용안함)
  • PHP_LOG_TIMEZONE_SET
    					
    타임존 설정. 다른 지역의 서버 시간으로 변경하여 통계를 사용합니다. 
    
    기본값: Asia/Seoul
  • PHP_LOG_STATISICS_PREFIX
    					
    파일 접두사. 
    다수의 통계 파일을 만들 때 필요합니다.
    허용하는 문자: [0-9 a-z _]
  • PHP_LOG_EVIDENCE_DROP
    					
    흔적 로그 파일 보관일.
    
    기본 값: 7(일)
  • PHP_LOG_EVIDENCE_NAME
    					
    흔적 로그 이름.
    
    기본 값: evidence
  • PHP_LOG_STATISTICS_NAME
    					
    접속자 통계 이름.
    
    기본 값: statistics
  • PHP_LOG_COUNTRY_API
    					
    국가 API 사용여부. 국가, 도시, ISP - API.
    
    기본 값: false (false 는 사용안함.)
  • PHP_LOG_IP_TRACE_API
    					
    API 주소.
    
    기본값: freegeoip.net/json/
    
    사용할 수 있는 무료 API
    1. api.hostip.info/get_json.php?ip=
    2. freegeoip.net/json/
    3. ip-api.com/json/
    4. www.telize.com/geoip/
    
    1,2,3 (번) API를 사용하고자 한다면 $this->load 를 정의할 필요 없이 PHP_LOG_COUNTRY_API, PHP_LOG_IP_TRACE_API 상수만 정의하면 됩니다.
    
    그 외의 API를 사용하고자 한다면 아래 코드에서 반환 값을 value 에 정의해 주시면 됩니다.
    
      $this->load = array(
        "country" => "국가",
        "countryCode" => "국가 코드",
        "region" => "지역 코드",
        "regionName" => "지역 이름",
        "city" => "도시",
        "zip" => "우편 번호",
        "lat" => "위도",
        "lon" => "경도",
        "timezone" => "타임존",
        "isp" => "ISP 통신 사업자",
        "org" => "조직 이름",
        "as" => "AS 번호/이름",
        "query" => "사용자 IP 주소"
    );
    								
    ex #1.
    $this->load = array(
      "country" => "country",
      "countryCode" => "country_code",
      "region" => "region_code",
      "regionName" => "region",
      "city" => "city",
      "zip" => "zipcode",
      "lat" => "latitude",
      "lon" => "longitude",
      "timezone" => "timezone",
      "isp" => "isp",
      "org" => "org",
      "as" => "asn",
      "query" => "ip"
    );

로그 저장하기.

로그 스크립트는 다음 2가지 형태로 로그가 저장되고, 각각 다른 목적으로 기록합니다.

  • 흔적 파일
    						
    정상적인 사용자인지 악의적 사용자인지를 알기 위해 따로 저장됩니다.
      저장 위치: logs/evidence.2014-09-30.php
      기록 형태: ip [date] 현재 페이지 “브라우저 정보”
    
    흔적 기능만 사용하고자 한다면 다음과 같이 불러 오십시오.
      $visit = new browscap():
      $visit->put_unicellular_evidence();
    
    흔적 파일은 기본적으로 7일간 저장되지만 저장 날짜를 늘리고 싶다면 상수 PHP_LOG_EVIDENCE_DROP 를 사용하십시오.
  • 통계 파일
    						
    어떤 경로로 접속했거나 기기 정보나 브라우저 정보, 사용자 정보의 통계를 보기 위해 저장됩니다.
      저장 위치: logs/2014/statistics.2014-09-30.php
        $visit = new browscap():
        $visit->put_evidence();
    
      반환 값: 성공시 true, 실패시 다음 배열을 반환합니다.
      array(
        "error",
        "The problem is to '%s' folder.",
        "Please check a actual folders and permission."
      );

로그 불러오기.

통계는 원한다면 년 별, 월 별, 일 별, 시간대 별 데이터나 이전 날짜의 데이터를 불러올 수 있습니다.
또한 브라우저, 기기, OS 별 데이터를 볼 수도 있습니다.

통계 데이터를 불러 오려면 다음과 같이 작성하십시오.

						
$visit = new browscap();
$visit->get_evidence(‘불러 올 통계’);

ex.
$visit = new browscap();

$accessed = array(
  'last_connection', // 마지막 방문 시간
  'stat', /*
      array(
        'unique', // 순방문자수
        'visits' // 페이지뷰
      )
         */
  'pageviews', // 페이지 뷰, 흔적 파일의 데이터를 기초로 표시됩니다.
  'vestige', // 현재 접속자, ip = 접속 time
  'country', // 접속 국가
  'city', // 접속 도시
  'isp', // 접속 ISP
  'browser', // 브라우저 정보
  'os', // os 정보
  'client', // client 정보
  'current', // 접속 시간대 수
  'year', // 년 접속자수
  'month', // 월 접속자수
  'day', // 일 접속자수
  'week', // 주 별 접속자수
  'request', // 방문 경로 수
  'referer', // 방문경로 수
  'inflow', // host 수
  'keyword' // 유입 키워드 수
);

foreach($accessed as $key=>$values)
{
  print_r($visit->get_evidence($values));
}

검색은 2014, 2014-09, 2014-09-27 의 형식으로 조회합니다. 그 외의 문자가 오면 무시됩니다.

2014(년)을 입력하면 2014년 누적 통계를 볼 수 있고, 2014-09 를 입력하면 2014-09(월)에 대한 누적 통계를 볼 수 있습니다.

Example #1

전체 구성

						
define("HABONYPHP_DIRNAME", "./log/");
// 카운터에서 제외할 IP 공백으로 다수 설정
define("PHP_LOG_EVASION_IP", "182.210.87.*** 127.0.0.1 ::1");
								
// 국가 API 사용
define("PHP_LOG_COUNTRY_API", true);
define("PHP_LOG_IP_TRACE_API", "www.telize.com/geoip/");
								
require_once (HABONYPHP_DIRNAME . 'library/get_Browser.php');
$visit = new browscap();
$visit->load = array(
  "country" => "country",
  "countryCode" => "country_code",
  "region" => "region_code",
  "regionName" => "region",
  "city" => "city",
  "zip" => "zipcode",
  "lat" => "latitude",
  "lon" => "longitude",
  "timezone" => "timezone",
  "isp" => "isp",
  "org" => "org",
  "as" => "asn",
  "query" => "ip"
);
								
if(true !== ($error = $visit->put_evidence()))
{
  // 에러가 발생하면...
  if($error[0] === 'error')
  {
    print_r($error);
  }
} 

Example #2

사용자 정보를 다른 서버로 전송하기

사용자 정보를 다른 서버로 전송하기 위해서 cUrl를 이용합니다.
예제 파일은 output.php 에 첨부되어 있습니다.
자바스크립트로 사용자 정보를 http://example.com/log/output.php 서버로 전송하는 예제입니다.

						
// http://example.com/log/output.php 로 사용자 정보를 전송합니다.
<script type="text/javascript">
  (function(){var t=document.createElement("script");t.src='http://example.com/log/output.php?referer='+document.referrer+'&url='+document.location.href;t.type='text/javascript';t.async=true;var d=document.getElementsByTagName('script')[0];d.parentNode.insertBefore(t,d);})();
</script>

// 전송 받는 서버에서는 다음 코드가 실행됩니다.

// LOG 가 설치된 HTTP 경로
define("HABONYPHP_LOG_HTTP_URL", "http://example.com/log/");
// browscap 이 설치된 경로
define("HABONYPHP_DIRNAME", "./");

require_once (HABONYPHP_DIRNAME . 'library/get_Browser.php');
$visit = new browscap();

$url = parse_url( $_GET['url'] );

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, HABONYPHP_LOG_HTTP_URL . "put.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_REFERER, $_GET['referer'] );
curl_setopt($ch, CURLOPT_USERAGENT, $visit->user_agent() );

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Request-URI: ' . $url['path'] . (!empty($url['query']) ? '?'.$url['query'] : ''), 
  'Client-IP: ' . $visit->getreal_ipaddr()) 
);

$query = curl_exec($ch);
curl_close($ch);