browscap.php 는 Web-Log 사용에 도움되기 위한 기본 설명서입니다.
(이전 버전에 대한 사용 설명서를 보시려면 log.php 를 클릭하십시오.)

    주요 특징

  • 현재 접속자.
  • 날짜별 통계. ex. 년,월,일,시간 별 통계.
  • 기기별 통계. ex. 브라우저, OS, 기기별 통계 및 CPU.
  • URL 별 통계. ex. 방문 경로, 페이지 경로, 유입 키워드 및 검색 엔진 봇 통계.
  • 무료 API 를 이용한 국가 별 통계 지원. ex. 국가, 도시, ISP 통계.
  • 지난 날짜 별 검색 지원.
 

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

  1. browscap.php
    Log 전체 프로그램을 담당합니다.
  2. parse_ini.php
    INI 내용을 저장하거나 가져 옵니다.
  3. search_bots.php
    HTTP_USER_AGENT 가 검색 엔진 로봇인지 확인합니다.
  4. globals_filter.php
    _SERVER 전역 변수를 필터링합니다.
  5. timezone.php
    TIME-ZONE 을 설정합니다.
  6. /library/ini
    Log 스크립트는 BrowscapINI 을 이용해 자료를 수집합니다.
    최신 버전은 아래 링크에서 받을 수 있습니다.
    Browscap 무료 다운로드

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

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

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

환경 설정

공통 상수

  • HABONYPHP_DIRNAME
    						
    Web-Log 가 설치된 경로. 끝에 반드시 / 를 입력해 주세요.
    
    기본값: ./

사용 가능한 상수

  • PHP_BROWSCAP_INI_MD5_STRING
    						
    로그 복사본 파일 접두사 - MD5 문자열.
    
    기본 값: Parse INI Generator
  • PHP_LOG_PREVIOUS_STATISTICS
    						
    검색으로 통계를 불러올 년도.
    허용 문자: 0-9 와 숫자가 아닌 임의의 한 문자.
    
    ex. 1) index.php?dictate=2015.08.10
    ex. 2) index.php?dictate=2015-08-10

사용 가능한 목록.

Web-Log 클래스에서 사용할 수 있는 메소드 목록을 설명합니다.

  • set_browscap( settings )

    Web-Log 를 시작하기 전에 설정을 구성합니다.

    • settings: 배열,
      • browscap_name: BrowscapINI 파일 이름. 기본 값: lite_php_browscap.ini
        library/ini/ 에 위치하는 Browscap 파일 이름을 설정합니다.
        												
        // FULL 버전 파일 이름이 다를 경우 파일 이름을 변경해야 합니다.
        $brows = new browscap();
        $brows->set_browscap( 
        	array(
        		'browscap_name' => 'full_php_browscap.ini'
        	) 
        );
      • logging_dir: LOG 가 저장되는 경로(또는 파일 이름). 기본 값: ./logs
        해당 폴더가 07x7 로 설정되어 있어야 로그가 기록됩니다.
        												
        $brows = new browscap();
        $brows->set_browscap( 
        	array(
        		'logging_dir' => '../logs'
        	) 
        );
      • timezone: TIME-ZONE 를 설정합니다. 기본 값: Seoul
        Asia/Seoul, Seoul, +9.00, -9, 9.3 의 형식으로 설정합니다.
      • time_limit: 로그 유지 시간. 기본 값: 30(분). 0 은 사용 안함.
        												
        // 로그 유지 시간을 사용하지 않습니다.
        $brows = new browscap();
        $brows->set_browscap( 
        	array(
        		'time_limit' => 0
        	) 
        );
      • stat_name: 방문자 통계 파일 접두사. 기본 값: statistics
      • evid_name: 흔적 파일 접두사. 기본 값: evidence
      • vest_name: 현재 접속자 이름 접두사. 기본 값: vestige
      • stat_dump: 통계 복사본 파일 이름.
        기본 값: md5(PHP_BROWSCAP_INI_MD5_STRING . $_COOKIE['PHPSESSID'])
        												
        $brows = new browscap();
        $brows->set_browscap( 
        	array(
        		'stat_dump' => sha1("Y-m");
        	) 
        );
      • date_name: 파일 뒤에 붙는 날짜. 기본 값: Y(년)-m(월)-d(일)
        월별 통계로 사용할 경우 "Y-m" 로 설정하세요.
        - 대신 다른 임의 문자로 지정 가능.
        ex.) Y m d, Y.m.d, Y-m-d
        												
        // 월 별 통계로 설정합니다.
        $brows = new browscap();
        $brows->set_browscap( 
        	array(
        		'date_name' => "Y m"
        	) 
        );
      • evid_drop: 흔적 파일 보관일. 기본 값: 7(일)
  • set_timezone( timezone )

    TIME-ZONE 을 설정합니다.

    • timezone: 기본 값: Seoul.
      다른 시간대로 변경 필요할 때 사용됩니다.
      ex.) Asia/Seoul, Seoul, +9.00, -9, 9.3 의 형식

    							
    // 시차를 +11시로 변경합니다.
    $brows = new browscap();
    $brows->set_timezone( '11' );
  • set_log_dir( logging_dir )

    로그가 저장되는 경로(또는 폴더 이름)을 설정합니다.
    해당 폴더가 07x7 권한이 되어 있어야 합니다.

    • logging_dir: 로그가 저장될 위치.

    							
    $brows = new browscap();
    $brows->set_log_dir( '../../logs' );
  • set_browscap_user( key, data )

    사용자 INI 배열을 설정합니다.

    • key: 사용자 고유 키
    • data: 사용자 배열

    									
    ex.1)
    $brows = new browscap();
    
    $key = 'habon php';
    $data = array( 'asp', 'php', 'cgi', 'jsp' );
    
    $brows->set_browscap_user($key, $data);
    /*
     결과:
    
     [habony php]
     asp = 1
     php = 1
     cgi = 1
     jsp = 1
    */
    
    
    ex.2)
    // 다수 사용자 필드 설정 예제.
    $brows = new browscap();
    
    $brows->set_browscap_user( 'habon php', array( 'asp', 'php', 'cgi', 'jsp' ) );
    
    $brows->set_browscap_user( 'vote', array('agree') );
  • set_ip_detour( ip_detour )

    통계에서 제외할 IP 를 설정합니다.

    • ip_detour: 제외할 IP 배열. 기본적으로 127.0.0.1 과 ::1 는 제외 대상입니다.

    							
    $brows = new browscap();
    
    $data = array('10.1.0.1', '198.0.0.1');
    
    $brows->set_ip_detour($data);
  • set_vestige_name( username )

    현재 접속자 IP 대체할 문자열을 설정합니다.

    • username: IP 를 대체할 문자열.
      현재 접속자 식별은 IP 로 구분하지만 필요하다면 "식별 이름" 으로 대체 가능합니다.

    							
    ex.1)
    $brows = new browscap();
    $brows->set_vestige_name( 'habony' );
    
    ex.2)
    $brows = new browscap();
    $brows->set_vestige_name( $_SESSION['user_name'] );
  • set_ip_trace_api( api_url )

    무료 IP-Trace API 를 설정합니다.
    무료 IP API 는 1 - 5중 하나로 설정할 수 있습니다.
    사용을 원하지 않을 경우 0 이나 null, false 의 값으로 설정하세요.

    • api_url: 1 - 5 중 하나, 또는 API URL. 기본 값: 1
      사용 가능한 무료 API
      1. http://ip-api.com/json/
      2. http://www.telize.com/geoip/
      3. https://freegeoip.net/json/
      4. http://ip.pycox.com/json/
      5. http://api.hostip.info/get_json.php?position=true&ip=

    							
    ex.1)
    // 무료 API 2번을 사용합니다.
    $brows = new browscap();
    $brows->set_ip_trace_api( 2 );
    
    ex.2)
    // URL API 를 사용하는 경우
    $brows = new browscap();
    $brows->set_ip_trace_api( 'http://www.ipaddressapi.com/l/your_api_code?h=' );
  • Get_browser( seleted, sort, reverse, date_per )

    INI 파일 내용을 배열로 출력합니다.

    • seleted: 선택 사항. 배열 이름. 생략시 모든 배열을 얻습니다.
      단, true 로 설정하면 금일 흔적 파일의 동일 IP 수를 낮은 순으로 출력합니다.
    • sort: 선택 사항. 'key' or null
      'key' 이면 key 값을 정렬하고, null 이면 value 값을 정렬 합니다.
    • reverse: 선택 사항. true or false
      true 이면 내림 차순 정렬, null 이면 올림 차순 정렬 합니다.
    • date_per: 선택 사항. 누적 통계.
      ex.) 2015-08 이면 월 별 누적 통계, 2015 이면 년 누적 통계를 얻을 수 있습니다.

    							
    ex.1)
    $brows = new browscap();
    $list = $brows->Get_browser();
    print_r($list);
    
    ex.2)
    // 월 별 누적 통계를 출력합니다.
    $brows = new browscap();
    $list = $brows->Get_browser(null, null, null, '2015.08');
    print_r($list);
    
    ex.3)
    // 0 ~ 23 시 까지의 통계를 출력합니다.
    $brows = new browscap();
    $list = $brows->Get_browser('hours');
    print_r($list);
  • Put_browser()

    로그 정보를 INI 파일에 작성합니다.

    							
    $brows = new browscap();
    $brows->Put_browser();
  • pattern

    사용자 USER AGENT 패턴을 배열로 저장합니다.
    Put_browser() 을 호출할 때만 저장됩니다.

    							
    $brows = new browscap();
    $brows->Put_browser();
    
    print_r($brows->pattern);
    /*
    결과:
    
    Array(
      "browser_name_pattern" => "Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) Chrome/36.*Safari/*",
      "browser_name_regex" => "^Mozilla/5\.0 (.*Windows NT 6\.1.*) AppleWebKit/.* (KHTML, like Gecko) Chrome/36\..*Safari/.*$"
    );
    */

반환되는 에러 목록

로그를 저장하거나 읽기 중 에러가 발생하면 $this->error 에 저장될 에러 목록을 설명합니다.

  • BrowscapINI 파일을 읽어 들이지 못할 때 출력되는 에러입니다.
    					
    array(
    	'code' => 103,
    	'name' => 'BrowscapINI 파일 이름',
    	'message' => "'BrowscapINI 파일 이름' file can not be loaded."
    );
  • 로그를 저장할 폴더를 만들지 못할 때 출력되는 에러입니다.
    					
    array(
    	'code' => 104,
    	'name' => '폴더 이름',
    	'message' => "Please check with '폴더 이름' folder permissions."
    );
  • 로그를 저장할 폴더에 쓰기 권한이 없을 때 출력되는 에러입니다.
    					
    array(
    	'code' => 105,
    	'name' => '폴더 이름',
    	'message' => "Please check with '폴더 이름' folder permissions."
    );

INI 일반 필드 목록

로그 파일에 저장되는 일반적인 필드 목록을 설명합니다.

  • stat:
    • unique: 순 방문자 수.
    • visits: 페이지 뷰 수.
    • access: 마지막 액세스 시간이 저장됩니다.
  • accessed:
    • date: Y-m-d 형식. ex.) 2015-08-10
  • year: ex.) 2015 (년)
  • mon: ex.) 8 (월)
  • mday: ex.) 25 (일)
  • hours: 0 ~ 23 (시).
  • weekday: 완전한 요일 문자. ex.) Tuesday
  • wday: 주 차. 둘째 주이면 2 로 기록 됩니다.
  • yday: 1월 1일 부터 오늘 까지의 일 수. 8월 25일 이면 총 일 수 236 (일) 로 저장됩니다.
  • request: 방문 페이지.
  • referer: 방문 경로.
  • keyword: 유입 키워드.
  • Search_Bots: 검색 엔진 로봇 방문 수.
  • country: 국가. (IP-Trace API 를 사용하는 경우에만 해당.)
  • city: 도시. (IP-Trace API 를 사용하는 경우에만 해당.)
  • timezone: 타임존. ex.) Asia/Seoul (IP-Trace API 를 사용하는 경우에만 해당.)
  • isp: ISP 통신 사업자. (IP-Trace API 를 사용하는 경우에만 해당.)
  • 사용자 정의 필드

BrowscapINI 필드 목록

로그 파일에 저장되는 BrowscapINI 필드 목록을 설명합니다.
최신 버전은 (Browscap 무료 다운로드) 에서 다운로드 받을 수 있습니다.

  • lite_php_browscap.ini

    주요 브라우저 및 검색 엔진에 최적화된 Browscap 파일의 작은 버전입니다.
    이 파일은 대부분의 웹 사이트에 적합하여 기본 포함 합니다.

    • Comment: 브라우저 + 버전. ex.) Chrome 44.0
    • Browser: 브라우저. ex.) Chrome
    • Version: 브라우저 버전. ex.) 44
    • Platform: 운영 체제. ex.) Win7
    • isMobileDevice: 모바일이면 true, 아니면 false 로 저장.
    • isTablet: 테블릿이면 true, 아니면 false 로 저장.
    • Device_Type: 주변 장치. ex.) Desktop, Mobile Phone, Tablet
  • php_browscap.ini

    대부분의 브라우저 및 검색 엔진에 최적화된 Browscap 파일의 특별 버전입니다!
    lite 버전 필드와 다음의 필드를 추가적으로 사용할 수 있습니다.

    • Browser_Maker: 브라우저 제조사. ex.) Google Inc
    • MajorVer: 브라우저 버전 앞 자리. ex.) 44
    • MinorVer: 브라우저 버전 소수점 자리. ex.) 0
    • Win16: CPU 가 16 비트 이면 true.
    • Win32: CPU 가 32 비트 이면 true.
    • Win64: CPU 가 64 비트 이면 true.
    • Device_Pointing_Method: 마우스, 터치 패드. ex.) mouse, touchscreen
  • full_php_browscap.ini

    Browscap 의 모든 기능을 사용할 수 있는 버전입니다.
    lite 버전, 특별 버전 필드와 다음의 필드를 추가적으로 사용할 수 있습니다.

    • Browser_Type: Browser 나 bot, bot 이면 Bot/* 의 형식. ex.) Bot/Crawler
    • Browser_Bits: 브라우저 비트. 32 비트 브라우저이면 32 로 저장됩니다.
    • Browser_Modus: 운영 체제 모듈. ex.) Desktop Mode
    • Platform_Version: 운영 체제 버전. ex.) 6.1
    • Platform_Description: 운영 체제 추가 내용. ex.) Windows 7
    • Platform_Maker: 운영 체제 제조사. ex.) Microsoft Corporation
    • Platform_Bits: CPU 비트, CPU 가 32 비트이면 32 로 저장됩니다.
    • Alpha: 브라우저가 알파 이면 true, 아니면 false.
    • Beta: 브라우저가 베타 이면 true, 아니면 false.
    • Frames: Frames 환경이면 true, 아니면 false.
    • IFrames: IFrames 환경이면 true, 아니면 false.
    • Tables: Tables 이면 true, 아니면 false.
    • Cookies: 쿠키 사용 가능한 환경이면 true, 아니면 false.
    • BackgroundSounds: 백그라운드 사운드가 있으면 true, 아니면 false.
    • JavaScript: JavaScript 사용 가능한 환경이면 true, 아니면 false.
    • VBScript: VBScript 사용 가능한 환경이면 true, 아니면 false.
    • JavaApplets: JavaApplets 사용 가능한 환경이면 true, 아니면 false.
    • ActiveXControls: ActiveX 사용 가능한 환경이면 true, 아니면 false.
    • isSyndicationReader: RSS Reader 이면 true, 아니면 false.
    • Crawler: Browser_Type 이 Bot/Crawler 이면 true, 아니면 false.
    • CssVersion: CSS 버전. ex.) 3
    • AolVersion:
    • Device_Name: 주변 기기 이름. ex.) Windows Desktop, Vibe Z LTE, iPhone
    • Device_Maker: 주변 기기 제조사. ex.) Apple Inc
    • Device_Code_Name: 주변 기기 이름. ex.) Windows Desktop, iPad, Macintosh
    • Device_Brand_Name: 주변 기기 제조사. ex.) Apple
    • RenderingEngine_Name: 레이아웃 엔진 이름. ex.) WebKit, Blink
    • RenderingEngine_Version: 레이아웃 엔진 버전. ex.) 12.0
    • RenderingEngine_Description: 레이아웃 엔진 추가 내용. ex.) a WebKit Fork by Google
    • RenderingEngine_Maker: 레이아웃 엔진 제조사. ex.) Google Inc


BrowscapINI 로그 쓰기 기본 작성 방법.

형식: Put_browser();

Example #1

로그 쓰기는 가능하면 파일 밑단에 설치하는게 제일 좋습니다.

						
<html>
	<body>
		<h1>Habony phP!</h1>
	</body>
</html>
<?php
define("HABONYPHP_DIRNAME", "../");

require_once(HABONYPHP_DIRNAME . "library/browscap.php");

$brows = new browscap();

// 로그를 저장하는 경로가 다르다면 로그 폴더 경로를 설정합니다.
$brows->set_log_dir( 
	'../../data/logs'
);
$brows->Put_browser();

?>

BrowscapINI 로그 자료 출력 작성 방법.

형식: Get_browser( seleted, sort, reverse, date_per );

Example #1

로그 자료 출력의 기본적인 작성 방법입니다.

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once(HABONYPHP_DIRNAME . "library/browscap.php");

$brows = new browscap();

// 모든 필드를 내림 차순으로 출력합니다.
$list = $brows->Get_browser(null, null, true);

// Referer 필드를 출력합니다.
foreach($list['referer'] as $k=>$v)
{
	echo htmlspecialchars($k, ENT_QUOTES) . " = $v <br />";
}

// 국가 필드를 출력합니다.
foreach($list['country'] as $k=>$v)
{
	echo htmlspecialchars($k, ENT_QUOTES) . " = $v <br />";
}
?>

Example #2

로그 누적 자료 출력 방법입니다.
date_per 인수에 date("Y-m") 을 설정하면 이번 달의 누적 통계를 볼 수 있습니다.

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once(HABONYPHP_DIRNAME . "library/browscap.php");

$brows = new browscap();

// 올해 년 누적 통계 자료를 내림 차순으로 출력합니다.
$list = $brows->Get_browser(null, null, true, date("Y"));

?>

Example #3

단일 필드를 출력하는 방법입니다.

						
<?php

define("HABONYPHP_DIRNAME", "../");

require_once(HABONYPHP_DIRNAME . "library/browscap.php");

$brows = new browscap();

// 0 ~ 23 (시)의 통계 자료를 key 값을 정렬하여 올림 차순으로 출력합니다.
$list = $brows->Get_browser('hours', 'key');
$i = 0;
for($i=0; $i<24; $i++;)
{
	echo "$i = " . (!empty($list[$i]) ? $list[$i] : 0) . "<br />";
}
/*
결과:

0 = 12
1 = 3
2 = 9
3 = 45
4 = 9
5 = 2
....
*/

?>

사용자 정의 필드 사용.

형식: set_browscap_user( key, data );

Example #1

다수 set_browscap_user() 를 이용하면 원하는 개수 만큼 추가할 수 있습니다.

						
<?php
define("HABONYPHP_DIRNAME", "../");

require_once(HABONYPHP_DIRNAME . "library/browscap.php");

$brows = new browscap();

// 로그를 저장하는 경로가 다르다면 로그 폴더 경로를 설정합니다.
$brows->set_log_dir( 
	'../../data/logs'
);

// 사용자 필드 추가하기
$brows->set_browscap_user( 'vote', array('agree', 'free') );
$brows->set_browscap_user( 'user_name', array($_SESSION['user_name']) );
/*
결과:

[vote]
agree = 1
free = 1

[user_name]
habony = 1
*/

$brows->Put_browser();

?>

BrowscapINI 로그 정보를 외부 서버로 전송하기.

Example #1

로그 정보를 다른 서버로 전송하여 통계를 얻을 수 있습니다.
자바스크립트로 로그 정보를 http://example.com/vestiges/output.php 서버로 전송합니다.

						
<?php

/*
	http://example.com/vestiges/output.php 로 사용자 정보를 전송합니다.
*/

<script type="text/javascript">
  (function(){var t=document.createElement("script");t.src='http://example.com/vestiges/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>


/*
	http://example.com/vestiges/output.php 파일의 내용
	전송 받는 서버에서는 다음 코드가 실행됩니다.
*/

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

// browscap 이 설치된 경로
define("HABONYPHP_DIRNAME", "./");

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

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

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

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

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