이것은 매우 복잡하고 거의 완전히 쓸모없는 브라우저 스니핑 라이브러리입니다. 브라우저 스니핑을 사용하면 안 되기 때문에 쓸모가 없습니다. 그러니 지금 당장 멈추고 대신 기능 감지에 관한 내용을 읽어보세요. 나는 심각하다. 저리 가요. 나중에 나한테 고마워할 거야.
서버에서 사용하기 위한 whichBrowser의 PHP 버전입니다. PHP 8을 포함하여 PHP 7.0 이상과 완벽하게 호환됩니다.
또한 사용 가능:
whichBrowser/Parser-JavaScript
서버에서 Node.js와 함께 사용할 JavaScript 버전의 whichBrowser
어떤 브라우저/서버
브라우저에서 사용할 JavaScript API를 제공하는 PHP로 작성된 서버
그런데 왜 거의 완전히 쓸모없으면서 도 완전히 쓸모없지는 않은가? 글쎄요, 규칙에는 항상 예외가 있습니다. 브라우저 스니핑을 수행하는 데는 타당한 이유가 있습니다. 즉, 사용자 경험을 개선하거나 웹 사이트에서 어떤 브라우저가 사용되는지에 대한 정보를 수집하기 위한 것입니다. 내 웹사이트는 html5test.com이고 어떤 점수가 어떤 브라우저에 속하는지 알고 싶었습니다. 그러기 위해서는 브라우저 스니핑 라이브러리가 필요합니다.
왜 엄청나게 복잡합니까?
모두가 거짓말을 하기 때문이죠. 진지하게, 완전히 진실한 브라우저는 하나도 없습니다. 거의 모든 브라우저는 Netscape 5라고 말하고 거의 모든 WebKit 브라우저는 Gecko를 기반으로 한다고 말합니다. Internet Explorer 11조차도 이제 더 이상 IE라고 주장하지 않고 대신 Gecko와 같은 이름 없는 브라우저를 사용합니다. 그리고 상황은 더욱 악화됩니다. 그렇기 때문에 복잡합니다.
어떤 종류의 정보를 제공하나요? 브라우저, 렌더링 엔진, OS 및 장치에 대한 정보가 포함된 멋진 개체를 얻습니다. 이름과 버전은 물론 장치 제조업체와 모델까지 제공합니다. 그리고 whichBrowser는 꽤 집요합니다. 다른 사람들이 제공하지 않는 정보를 제공합니다. 예를 들어:
JUC (Linux; U; 2.3.6; zh-cn; GT-I8150; 480*800) UCWEB8.7.4.225/145/800
UC Browser 8.7 on a Samsung Galaxy W running Android 2.3.6
안드로이드는 언급된 적 없음
Mozilla/5.0 (Series40; Nokia501/10.0.2; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/3.0.0.0.73
Nokia Xpress 3.0.0 on a Nokia Asha 501 running Nokia Asha Platform
Series40 장치라고 주장하는 useragent 헤더에도 불구하고 우리는 그것이 실제로 Asha 플랫폼을 실행하고 있다는 것을 알고 있으며 OviBrowser가 Nokia Xpress로 이름이 바뀌었다는 것도 알고 있습니다.
Opera/9.80 (X11; Linux zvav; U; zh) Presto/2.8.119 Version/11.10
Opera Mini on a Nokia 5230 running Series60 5.0
useragent 헤더는 Linux의 Opera 11.10과 비슷하지만 Opera Mini라는 것을 알고 있습니다. 다른 헤더를 통해 실제 운영 체제와 장치 모델을 알아낼 수도 있습니다.
whichBrowser는 PHP 7.0 이상이 필요하며 PHP 8을 지원합니다. whichBrowser는 PSR-4 자동 로딩 표준과 호환되며 PSR-1 및 PSR-2 코딩 스타일을 따릅니다.
PHP용 표준 패키지 관리자인 Composer를 사용하여 whichBrowser를 설치할 수 있습니다. 패키지 이름은 whichbrowser/parser
입니다.
composer require whichbrowser/parser
간단한 명령을 실행하여 whichBrowser를 쉽게 업데이트할 수 있습니다.
composer update whichbrowser/parser
이 명령을 가능한 한 자주 실행해야 합니다. 이 목적을 위해 cron 작업 설정을 고려할 수도 있습니다.
첫 번째 단계에는 Composer 오토로더가 필요합니다.
<?php
require ' vendor/autoload.php ' ;
두 번째 단계는 새로운 WhichBrowserParser
개체를 만드는 것입니다. 이 개체에는 라이브러리가 브라우저에 대해 찾을 수 있는 모든 정보가 포함됩니다. 객체에는 브라우저가 보내는 헤더 또는 사용자 에이전트 문자열과 같은 필수 매개변수가 있습니다. 헤더를 사용하는 것이 더 나은 탐지를 가능하게 하므로 선호되지만, useragent 문자열만 있으면 이 방법도 작동합니다.
예를 들어:
$ result = new WhichBrowser Parser ( getallheaders ());
또는:
$ result = new WhichBrowser Parser ( $ _SERVER [ ' HTTP_USER_AGENT ' ]);
이제 $result
변수에는 정보를 쿼리할 수 있는 개체가 포함됩니다. 정보에 접근하는 방법은 다양합니다.
먼저 toString()
함수를 호출하여 사람이 읽을 수 있는 식별 정보를 얻을 수 있습니다.
" You are using " . $ result -> toString ();
// You are using Chrome 27 on OS X Mountain Lion 10.8
또 다른 가능성은 객체를 쿼리하는 것입니다.
$ result -> isType ( ' desktop ' );
// true
$ result -> isType ( ' mobile ' , ' tablet ' , ' media ' , ' gaming:portable ' );
// false
$ result -> isBrowser ( ' Maxthon ' , ' < ' , ' 4.0.5 ' );
// false
$ result -> isOs ( ' iOS ' , ' >= ' , ' 8 ' );
// false
$ result -> isOs ( ' OS X ' );
// true
$ result -> isEngine ( ' Blink ' );
// true
다음 속성에 직접 액세스할 수도 있습니다.
$ result -> browser -> toString ();
// Chrome 27
$ result -> engine -> toString ();
// Blink
$ result -> os -> toString ();
// OS X Mountain Lion 10.8
또는 다음 속성의 일부에 직접 액세스하세요.
$ result -> browser -> name ;
// Chrome
$ result -> browser -> name . ' ' . $ result -> browser -> version -> toString ();
// Chrome 27
$ result -> browser -> version -> value ;
// 27.0 . 1453.110
$ result -> engine -> name ;
// Blink
마지막으로 버전을 직접 쿼리할 수도 있습니다.
$ result -> browser -> version -> is ( ' > ' , 26 );
// true
$ result -> os -> version -> is ( ' < ' , ' 10.7.4 ' );
// false
Parser
객체 생성 시 두 번째 매개변수로 배열을 전달하여 추가 옵션을 설정할 수 있습니다.
경우에 따라 봇 감지를 비활성화할 수도 있습니다. 이를 통해 봇은 의도적으로 whichBrowser를 속일 수 있으므로 봇이 모방하려는 사용자 에이전트의 신원을 파악할 수 있습니다. 이는 whichBrowser를 사용하여 웹 사이트의 다양한 변형 간에 전환하고 크롤러가 웹 사이트의 올바른 변형을 볼 수 있도록 하려는 경우 특히 유용합니다. 예를 들어 모바일 장치를 모방하는 봇은 사이트의 모바일 변형을 볼 수 있습니다.
$ result = new WhichBrowser Parser ( getallheaders (), [ ' detectBots ' => false ]);
whichBrowser는 요청 간 결과 캐싱을 위해 PSR-6 호환 캐시 어댑터를 지원합니다. 웹 사이트의 모든 페이지에서 whichBrowser를 사용하고 사용자가 여러 페이지를 방문하는 경우 캐시를 사용하는 것이 특히 유용합니다. 첫 번째 방문 동안 헤더가 구문 분석되고 결과가 캐시됩니다. 추가 방문 시 캐시된 결과가 사용되므로 헤더를 계속해서 구문 분석하는 것보다 훨씬 빠릅니다.
APC, Doctrine, Memcached, MongoDB, Redis 등과 같은 다른 유형의 캐시에 사용할 수 있는 어댑터가 있습니다. 이러한 어댑터의 구성은 모두 서로 다르지만 일단 구성되면 Parser
객체를 생성할 때 옵션으로 전달하거나 나중에 setCache()
함수를 사용하여 설정하기만 하면 됩니다. whichBrowser는 PHP 캐시에서 제공하는 어댑터와 작동하도록 테스트되었습니다. 어댑터를 제공하는 다른 패키지 목록은 Packagist를 참조하세요.
예를 들어, memcached 기반 캐시를 활성화하려면 추가 작성기 패키지를 설치해야 합니다.
composer require cache/memcached-adapter
그리고 whichBrowser/Parser에 대한 호출을 다음과 같이 변경합니다.
$ client = new Memcached ();
$ client -> addServer ( ' localhost ' , 11211 );
$ pool = new Cache Adapter Memcached MemcachedCachePool ( $ client );
$ result = new WhichBrowser Parser ( getallheaders (), [ ' cache ' => $ pool ]);
또는
$ client = new Memcached ();
$ client -> addServer ( ' localhost ' , 11211 );
$ pool = new Cache Adapter Memcached MemcachedCachePool ( $ client );
$ result = new WhichBrowser Parser ();
$ result -> setCache ( $ pool );
$ result -> analyse ( getallheaders ());
캐시된 결과를 몇 초 후에 삭제해야 하는지 지정할 수도 있습니다. 기본값은 900초 또는 15분입니다. whichBrowser가 캐싱에 너무 많은 메모리를 사용한다고 생각되면 이 값을 낮춰야 합니다. cacheExpires
옵션을 설정하거나 이를 setCache()
함수에 두 번째 매개변수로 전달하여 이를 수행할 수 있습니다.
새로운 WhichBrowserParser
개체가 생성되면 여기에는 다양한 속성과 함수가 포함됩니다. 이러한 속성은 모두 존재하도록 보장됩니다.
속성:
browser
engine
os
device
기능:
getType()
device
개체의 type
및 subtype
속성을 반환합니다. 하위 유형이 있는 경우 해당 유형에 연결되고 반색상으로 구분됩니다(예: mobile:smart
또는 gaming:portable
). 하위 유형을 적용할 수 없는 경우 유형(예: desktop
또는 ereader
만 반환합니다.
isType($type [,$type [,$type [,$type]]])
단일 인수를 사용하는 경우 인수가 device
개체의 type
속성과 일치하면 함수는 true
반환합니다. 인수는 선택적으로 하위 유형을 유형에 연결하고 세미콜론으로 구분하여 하위 유형을 제공할 수도 있습니다. 여러 인수를 사용할 수 있으며, 이 경우 인수 중 하나가 일치하면 함수는 true
반환합니다. 일치하는 인수가 없으면 false
반환합니다.
isMobile()
브라우저가 휴대폰, 태블릿, ereader, 카메라, 휴대용 미디어 플레이어, 시계 또는 휴대용 게임 콘솔과 같은 모바일 장치인 경우 true
반환합니다. 그렇지 않으면 false
반환합니다.
isBrowser($name [, $comparison, $version])
browser
개체의 name
및 version
속성을 쿼리하는 데 사용됩니다. 함수에는 name
기반으로 한 단순 비교에 대한 단일 인수 또는 name
과 version
모두 비교하기 위한 세 개의 인수가 포함될 수 있습니다. 첫 번째 인수에는 항상 브라우저 이름이 포함됩니다. 두 번째 인수는 <
, <=
, =
, =>
또는 >
를 포함할 수 있는 문자열입니다. 세 번째는 버전을 포함하는 정수, 부동 소수점 또는 문자열입니다. 10
, 10.7
또는 '10.7.4'
와 같은 버전을 사용할 수 있습니다. 버전 비교 수행 방법에 대한 자세한 내용은 Version
개체의 is()
함수를 참조하세요.
isEngine($name [, $comparison, $version])
engine
개체의 name
및 version
속성을 쿼리하는 데 사용됩니다. 이 함수는 isBrowser
와 정확히 동일한 방식으로 작동합니다.
isOs($name [, $comparison, $version])
os
개체의 name
및 version
속성을 쿼리하는 데 사용됩니다. 이 함수는 isBrowser
와 정확히 동일한 방식으로 작동합니다.
isDetected()
실제로 일부 브라우저가 감지되었습니까? 아니면 아무것도 감지하지 못했습니까?
toString()
운영 체제 및 장치 정보를 포함하여 감지된 브라우저에 대해 사람이 읽을 수 있는 표현을 가져옵니다.
WhichBrowserModelBrowser
클래스의 개체는 기본 WhichBrowserParser
개체의 browser
속성에 사용되며 다양한 속성을 포함합니다. 이 상황에서 속성을 적용할 수 없는 경우 해당 속성은 null이거나 정의되지 않습니다.
속성:
name
alias
version
stock
channel
mode
hidden
family
using
기능:
isFamily($name)
이 브라우저 제품군에 이 이름이 있습니까, 아니면 브라우저 자체에 이 이름이 있습니까?
isUsing($name)
제공된 이름을 사용하여 웹뷰를 사용하는 브라우저입니다.
getName()
브라우저 이름을 알아보세요
getVersion()
브라우저 버전 확인
toString()
감지된 브라우저에 대해 사람이 읽을 수 있는 표현을 가져옵니다.
WhichBrowserModelEngine
클래스의 개체는 기본 WhichBrowserParser
개체의 engine
속성에 사용되며 다양한 속성을 포함합니다. 이 상황에서 속성을 적용할 수 없으면 null이거나 정의되지 않습니다.
속성:
name
version
기능:
getName()
렌더링 엔진의 이름을 가져옵니다.
getVersion()
렌더링 엔진 버전을 가져옵니다.
toString()
감지된 렌더링 엔진에 대해 사람이 읽을 수 있는 표현을 얻습니다.
WhichBrowserModelOs
클래스의 개체는 기본 WhichBrowserParser
개체의 os
속성에 사용되며 다양한 속성을 포함합니다. 이 상황에서 속성을 적용할 수 없으면 null이거나 정의되지 않습니다.
속성:
name
version
family
기능:
isFamily($name)
이 운영 체제 제품군에 이 이름이 있습니까, 아니면 운영 체제 자체에 이 이름이 있습니까?
getName()
운영 체제 이름 가져오기
getVersion()
운영 체제 버전 확인
toString()
감지된 운영 체제에 대해 사람이 읽을 수 있는 표현을 가져옵니다.
WhichBrowserModelDevice
클래스의 개체는 기본 WhichBrowserParser
개체의 device
속성에 사용되며 다양한 속성을 포함합니다. 이 상황에서 속성을 적용할 수 없으면 null이거나 정의되지 않습니다.
속성:
type
subtype
identified
manufacturer
model
type
속성에는 다음 목록의 모든 값이 포함될 수 있습니다.
type
이 "mobile"인 경우 subtype
속성은 다음 목록의 값을 포함할 수 있습니다.
type
이 "gaming"인 경우 subtype
속성에는 다음 목록의 값이 포함될 수 있습니다.
기능:
getManufacturer()
제조사 이름 알아내기
getModel()
모델 이름 알아내기
toString()
감지된 장치에 대해 사람이 읽을 수 있는 표현을 가져옵니다.
WhichBrowserModelFamily
클래스의 개체는 WhichBrowserModelBrowser
및 WhichBrowserModelOs
개체의 family
속성에 사용되며 다양한 속성을 포함합니다. 이 상황에서 속성을 적용할 수 없으면 null이거나 정의되지 않습니다.
속성:
name
version
기능:
getName()
가족의 이름을 알아보세요
getVersion()
제품군 버전 받기
toString()
사람이 읽을 수 있는 가족 표현을 가져옵니다.
WhichBrowserModelUsing
클래스의 개체는 WhichBrowserModelBrowser
개체의 using
속성에 사용되며 다양한 속성을 포함합니다. 이 상황에서 속성을 적용할 수 없으면 null이거나 정의되지 않습니다.
속성:
name
version
기능:
getName()
웹뷰의 이름을 가져옵니다
getVersion()
웹뷰 버전을 얻으세요
toString()
사람이 읽을 수 있는 WebView 표현을 가져옵니다.
WhichBrowserModelVersion
클래스의 개체는 browser
, engine
및 os
개체의 version
속성에 사용되며 다양한 속성과 기능을 포함합니다. 이 상황에서 속성을 적용할 수 없으면 null이거나 정의되지 않습니다.
속성:
value
alias
nickname
details
기능:
is($version)
또는 is($comparison, $version)
이 기능을 사용하면 한 버전을 다른 버전과 쉽게 비교할 수 있습니다. 인수를 하나만 지정하면 버전이 동일한 경우 이 함수가 반환됩니다. 두 개의 인수를 지정할 수도 있습니다. 이 경우 첫 번째 인수에는 <
, <=
, =
, =>
또는 >
같은 비교 연산자가 포함됩니다. 두 번째 인수는 비교하려는 버전입니다. 10
, 10.7
또는 '10.7.4'
와 같은 버전을 사용할 수 있지만 10
10.0
과 동일하지 않습니다. 예를 들어 OS 버전이 10.7.4
인 경우:
$ result -> os -> version -> is ( ' 10.7.4 ' );
// true
$ result -> os -> version -> is ( ' 10.7 ' );
// true
$ result -> os -> version -> is ( ' 10 ' );
// true
$ result -> os -> version -> is ( ' 10.0 ' );
// false
$ result -> os -> version -> is ( ' > ' , ' 10 ' );
// false
$ result -> os -> version -> is ( ' > ' , ' 10.7 ' );
// false
$ result -> os -> version -> is ( ' > ' , ' 10.7.3 ' );
// true