웹 개발에서 특히 클라이언트 브라우저 또는 운영 체제의 버전 정보를 얻는 것이 일반적인 요구 사항입니다. 특히 클라이언트 환경에 응답해야 할 때. PHP에서 일반적으로 사용되는 방법 중 하나는 get_client_version () 함수와 preg_match ()를 결합하여 HTTP 요청 헤더의 사용자 에이전트 문자열을 구문 분석하는 것입니다.
이 기사는 실제 코드 예제를 통해이 프로세스의 구현 세부 사항을 자세히 분석합니다.
User-Agent 는 HTTP 헤더의 필드로, 요청을 보낼 때 클라이언트 (일반적으로 브라우저)가 동반하여 서버에 소프트웨어 및 하드웨어 환경 정보를 알려줍니다. 일반적인 사용자 에이전트 예는 다음과 같습니다.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
get_client_version () 함수의 주요 함수는 사용자의 사용자 에이전트 문자열에서 지정된 브라우저 또는 클라이언트의 버전 번호를 추출하는 것입니다. 이 목표를 달성하기위한 핵심 기술은 정규 표현식 일치이며 PHP의 preg_match ()는 이 작업을 수행하는 데 능숙합니다.
다음은 Chrome 브라우저의 버전 번호를 추출하는 데 사용되는 get_client_version () 의 예입니다.
function get_client_version($userAgent, $clientName) {
$version = null;
switch (strtolower($clientName)) {
case 'chrome':
if (preg_match('/Chrome\/([\d\.]+)/i', $userAgent, $matches)) {
$version = $matches[1];
}
break;
case 'firefox':
if (preg_match('/Firefox\/([\d\.]+)/i', $userAgent, $matches)) {
$version = $matches[1];
}
break;
case 'safari':
if (preg_match('/Version\/([\d\.]+).*Safari/', $userAgent, $matches)) {
$version = $matches[1];
}
break;
case 'edge':
if (preg_match('/Edg\/([\d\.]+)/i', $userAgent, $matches)) {
$version = $matches[1];
}
break;
default:
// 더 많은 고객을 확장 할 수 있습니다
break;
}
return $version;
}
preg_match () 는 PHP에서 정기적 인 일치를 수행하는 함수이며, 사용법은 다음과 같습니다.
preg_match(정규 표현, 일치 할 문자열, 결과 배열을 일치시킵니다);
정규 표현의 의미 /chrome \/( 1 \ d\.] +)/i의 예제는 다음과 같습니다.
Chrome/ : 고정 문자열 "Chrome/"와 일치합니다.
([\ d \.]+) : 연속 숫자 또는 도트 세트 (즉, 버전 번호)를 캡처하고 브래킷은 캡처 그룹을 나타냅니다.
/i : 케이스 일치를 무시합니다.
경기가 성공하면 버전 번호는 $ matches [1] 로 추출되어 사용을 위해 기능으로 돌아갑니다.
다음은 전체 테스트 예입니다.
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$client = 'chrome'; // 전송할 수 있습니다 'firefox', 'safari' 기다리다
$version = get_client_version($userAgent, $client);
echo "현재 사용됩니다 $client 브라우저 버전은입니다: $version";
로컬 서버에서 http://gitbox.net/test.php 에 액세스 할 때 (해당 도메인에 배포되었다고 가정) Chrome 브라우저를 사용하면 다음과 같은 내용을 출력합니다.
현재 사용됩니다 chrome 브라우저 버전은입니다: 122.0.0.0
확장 성 : 더 많은 클라이언트 (예 : Opera, UC 브라우저 등)에 대한 지원을 쉽게 추가 할 수 있으며 케이스를 추가하고 해당 규칙을 추가 할 수 있습니다.
견고성 : 널 또는 오류 값을 피하기 위해 사용자 에이전트 문자열의 기본 검증을 수행하는 것이 좋습니다.
보안 : 사용자 에이전트를 구문 분석하는 것은 일반적으로 안전하지만 인증과 같은 중요한 시나리오에서는 사용하지 않는 것이 좋습니다.