웹 개발에서 클라이언트 버전 정보 (예 : 브라우저, 운영 체제, 장치 유형 등)를 얻는 것이 일반적인 요구 사항입니다. 통계 분석, 기능적 호환성 판단 또는 개인화 된 디스플레이에 사용 되든 클라이언트 환경을 정확하게 식별하면 사용자 경험을 크게 향상시킬 수 있습니다.
PHP 자체 $ _server [ 'http_user_agent']는 기본 클라이언트 정보를 제공하지만 파싱은 쉽지 않습니다. 이 작업을보다 효율적이고 편리하게 만들기 위해보다 강력한 get_client_version 기능 도구 클래스를 캡슐화하여 브라우저, 운영 체제, 장치 유형 및 앱 버전을 자동으로 식별 할 수 있습니다.
원래 사용자 에이전트 문자열을 직접 사용하면 다음과 같은 고통이 있습니다.
문자열 형식은 통합되지 않았으며, 구문 분석 규칙은 복잡합니다
브라우저 및 운영 체제 버전은 자주 업데이트되며 인식 방법이 유효하지 않습니다.
유연성 및 확장 성 부족, 다소 터미널 적용 요구에 대처하기가 어렵습니다.
이러한 문제를 극복하려면 구조화되고 모듈 식이며 확장 가능한 공구 클래스가 필요합니다.
다음 기능을 갖춘 ClientVersionHelper 클래스를 만들 계획입니다.
브라우저 유형 및 버전 (Chrome, Firefox, Safari 등)을 자동으로 식별하십시오.
운영 체제 및 버전 (Windows, MacOS, Linux, Android, iOS)을 자동으로 식별합니다.
모바일 장치인지 확인하십시오
사용자 정의 응용 프로그램 버전 헤더 인식 (예 : 자체 개발 앱의 UA 형식)을 지원합니다.
통합 구조화 된 반환 형식을 제공하십시오
다음은 기본 구현으로 향후 프로젝트 요구 사항에 따라 더 확장 할 수 있습니다.
<?php
class ClientVersionHelper
{
protected $userAgent;
public function __construct($userAgent = null)
{
$this->userAgent = $userAgent ?: ($_SERVER['HTTP_USER_AGENT'] ?? '');
}
public function getClientInfo()
{
return [
'browser' => $this->getBrowser(),
'os' => $this->getOS(),
'device' => $this->isMobile() ? 'Mobile' : 'Desktop',
'raw' => $this->userAgent,
];
}
protected function getBrowser()
{
$ua = $this->userAgent;
if (preg_match('/Chrome\/([0-9\.]+)/i', $ua, $matches)) {
return 'Chrome ' . $matches[1];
}
if (preg_match('/Firefox\/([0-9\.]+)/i', $ua, $matches)) {
return 'Firefox ' . $matches[1];
}
if (preg_match('/Safari\/([0-9\.]+)/i', $ua) && !preg_match('/Chrome/i', $ua)) {
return 'Safari';
}
if (preg_match('/MSIE ([0-9\.]+)/i', $ua, $matches)) {
return 'Internet Explorer ' . $matches[1];
}
return 'Unknown';
}
protected function getOS()
{
$ua = $this->userAgent;
if (preg_match('/Windows NT ([0-9\.]+)/i', $ua, $matches)) {
return 'Windows ' . $matches[1];
}
if (preg_match('/Mac OS X ([0-9_\.]+)/i', $ua, $matches)) {
return 'macOS ' . str_replace('_', '.', $matches[1]);
}
if (preg_match('/Android ([0-9\.]+)/i', $ua, $matches)) {
return 'Android ' . $matches[1];
}
if (preg_match('/iPhone OS ([0-9_]+)/i', $ua, $matches)) {
return 'iOS ' . str_replace('_', '.', $matches[1]);
}
if (preg_match('/Linux/i', $ua)) {
return 'Linux';
}
return 'Unknown';
}
protected function isMobile()
{
return preg_match('/Mobile|Android|iPhone|iPad/i', $this->userAgent);
}
}
구조화 된 클라이언트 버전 정보는 간단한 호출만으로 얻습니다.
$clientHelper = new ClientVersionHelper();
$info = $clientHelper->getClientInfo();
echo '<pre>';
print_r($info);
echo '</pre>';
반환 결과의 예는 다음과 같습니다.
Array
(
[browser] => Chrome 120.0.0.0
[os] => Windows 10.0
[device] => Desktop
[raw] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...
)
다음 확장을 기존 기준으로 추가 할 수 있습니다.
자신의 앱 UA에서 MyApp/3.4.5 와 같은 사용자 정의 UA 식별자에 대한 지원 추가
더 많은 장치 인식을 지원하려면 UA 데이터베이스 (예 : https://gitbox.net/ua-database ) 통합
처리 효율을 향상시키기위한 캐싱 메커니즘을 제공하십시오
쉬운 재사용 및 업데이트를 위해이 클래스를 작곡가 패키지로 캡슐화하십시오.
효율적인 get_client_version 도구 클래스를 캡슐화하면 클라이언트가 인식 한 코드 로직을 크게 단순화 할 수있을뿐만 아니라 응용 프로그램이 더 관리 가능하고 확장 가능하게 만듭니다. 매번 사용자 에이전트를 수동으로 구문 분석하는 대신 강력하고 신뢰할 수있는 도구 클래스에 맡기는 것이 좋습니다.
장치 및 브라우저 유형의 수가 증가함에 따라 좋은 패키지는 프로젝트를 사용자 인식의 최전선에 유지합니다.