현재 위치: > 최신 기사 목록> get_client_version 도구 클래스의 향상된 버전을 캡슐화하는 방법

get_client_version 도구 클래스의 향상된 버전을 캡슐화하는 방법

gitbox 1970-01-01

웹 개발에서 클라이언트 버전 정보 (예 : 브라우저, 운영 체제, 장치 유형 등)를 얻는 것이 일반적인 요구 사항입니다. 통계 분석, 기능적 호환성 판단 또는 개인화 된 디스플레이에 사용 되든 클라이언트 환경을 정확하게 식별하면 사용자 경험을 크게 향상시킬 수 있습니다.

PHP 자체 $ _server [ 'http_user_agent']는 기본 클라이언트 정보를 제공하지만 파싱은 쉽지 않습니다. 이 작업을보다 효율적이고 편리하게 만들기 위해보다 강력한 get_client_version 기능 도구 클래스를 캡슐화하여 브라우저, 운영 체제, 장치 유형 및 앱 버전을 자동으로 식별 할 수 있습니다.

1. 포장을 해야하는 이유는 무엇입니까?

원래 사용자 에이전트 문자열을 직접 사용하면 다음과 같은 고통이 있습니다.

  • 문자열 형식은 통합되지 않았으며, 구문 분석 규칙은 복잡합니다

  • 브라우저 및 운영 체제 버전은 자주 업데이트되며 인식 방법이 유효하지 않습니다.

  • 유연성 및 확장 성 부족, 다소 터미널 적용 요구에 대처하기가 어렵습니다.

이러한 문제를 극복하려면 구조화되고 모듈 식이며 확장 가능한 공구 클래스가 필요합니다.

2. 도구 디자인 아이디어

다음 기능을 갖춘 ClientVersionHelper 클래스를 만들 계획입니다.

  • 브라우저 유형 및 버전 (Chrome, Firefox, Safari 등)을 자동으로 식별하십시오.

  • 운영 체제 및 버전 (Windows, MacOS, Linux, Android, iOS)을 자동으로 식별합니다.

  • 모바일 장치인지 확인하십시오

  • 사용자 정의 응용 프로그램 버전 헤더 인식 (예 : 자체 개발 앱의 UA 형식)을 지원합니다.

  • 통합 구조화 된 반환 형식을 제공하십시오

3. 코드 구현

다음은 기본 구현으로 향후 프로젝트 요구 사항에 따라 더 확장 할 수 있습니다.

 <?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);
    }
}

4. 예제를 사용하십시오

구조화 된 클라이언트 버전 정보는 간단한 호출만으로 얻습니다.

 $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 ...
)

5. 확장 방향 제안

다음 확장을 기존 기준으로 추가 할 수 있습니다.

  • 자신의 앱 UA에서 MyApp/3.4.5 와 같은 사용자 정의 UA 식별자에 대한 지원 추가

  • 더 많은 장치 인식을 지원하려면 UA 데이터베이스 (예 : https://gitbox.net/ua-database ) 통합

  • 처리 효율을 향상시키기위한 캐싱 메커니즘을 제공하십시오

  • 쉬운 재사용 및 업데이트를 위해이 클래스를 작곡가 패키지로 캡슐화하십시오.

6. 결론

효율적인 get_client_version 도구 클래스를 캡슐화하면 클라이언트가 인식 한 코드 로직을 크게 단순화 할 수있을뿐만 아니라 응용 프로그램이 더 관리 가능하고 확장 가능하게 만듭니다. 매번 사용자 에이전트를 수동으로 구문 분석하는 대신 강력하고 신뢰할 수있는 도구 클래스에 맡기는 것이 좋습니다.

장치 및 브라우저 유형의 수가 증가함에 따라 좋은 패키지는 프로젝트를 사용자 인식의 최전선에 유지합니다.