HOWTO · PHP

PHP에서 모바일 기기를 감지하는 방법

Mobile Detect 또는 사용자 에이전트 패턴을 사용해 PHP에서 모바일 요청을 분류하는 방법을 알아보세요.

이 페이지의 내용

PHP에서는 Composer로 설치하는 mobiledetect 라이브러리를 사용하거나, $_SERVER에서 HTTP_USER_AGENT를 가져와 preg_match()로 검사해 요청을 모바일로 분류할 수 있습니다. 두 방법 모두 요청 헤더에서 기기 유형을 추정할 뿐, 요청을 보낸 실제 기기가 무엇인지는 증명할 수 없습니다.

mobiledetect 클래스로 PHP에서 모바일 기기 감지하기

Composer를 사용해 프로젝트에 mobiledetect 라이브러리를 설치하려면 composer require mobiledetect/mobiledetectlib를 실행합니다. 그런 다음 Composer의 vendor/autoload.php를 불러오고 Mobile_Detect 인스턴스를 만듭니다. 이 라이브러리는 사용자 에이전트 문자열과 기타 헤더 등 요청 정보를 사용해 클라이언트를 분류합니다.

기본적인 모바일 확인에는 $detect->isMobile()을 호출합니다. 이 메서드는 불리언 값을 반환하며, 이를 if/else 분기에 사용해 모바일 또는 비모바일 결과를 선택할 수 있습니다. 태블릿을 별도로 처리해야 한다면 클래스의 isTablet() 메서드를 사용할 수도 있습니다. 일반적인 모바일 분류를 적용하기 전에 태블릿 결과가 레이아웃이나 기능에 어떤 영향을 줄지 정해 두세요.

이 분류는 PHP가 받은 요청을 기준으로 합니다. 브라우저의 반응형 디자인 모드에서 에뮬레이션 기기를 바꾸면 사용자 에이전트가 달라질 수 있지만, 그렇다고 모든 실제 휴대전화나 태블릿에서의 동작이 확인되는 것은 아닙니다. 사용자 에이전트 값은 변경될 수 있으므로 클라이언트 감지를 보안이나 신원 확인에 사용해서는 안 됩니다.

HTTP_USER_AGENT와 preg_match() 함수로 PHP에서 모바일 기기 감지하기

외부 라이브러리 없이 확인하려면 $_SERVER 슈퍼글로벌에서 HTTP_USER_AGENT를 읽고, 모바일과 관련된 몇 가지 용어와 대조하면 됩니다. 이 키가 없을 수도 있으므로 preg_match()를 호출하기 전에 문자열 기본값을 지정하세요. 아래 예제는 샘플 iPhone 사용자 에이전트 값을 검사합니다. 실제 웹 요청에서는 PHP가 요청 헤더에서 값을 가져옵니다.

<?php
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)';
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
$pattern = '/(android|iphone|ipod|ipad|mobile|tablet)/i';
$isMobile = preg_match($pattern, $userAgent) === 1;

echo $isMobile ? 'Mobile device detected' : 'Mobile device not detected';

preg_match()는 일치하면 1, 일치하지 않으면 0을 반환하며, 패턴을 평가할 수 없으면 false를 반환합니다. === 1로 비교하면 일치한 경우에만 해당 분기가 실행됩니다. 실제 요청에 헤더가 없으면 기본값은 빈 문자열이며, 이 패턴에서는 비모바일 분기로 처리됩니다.

이 결과는 대략적인 분류로 보아야 합니다. 사용자 에이전트 문자열은 없거나 수정될 수 있고, 값 자체가 바뀔 수도 있습니다. 직접 관리하는 짧은 패턴은 새로 등장했거나 흔하지 않은 클라이언트를 놓칠 수 있으며, 목록을 길게 만든다고 모든 경우를 포괄하는 것은 아닙니다. 모바일 사용자 에이전트 문자열을 다루는 Stack Overflow 토론은 커뮤니티가 관리하는 참고 자료이므로, 제안을 애플리케이션에 적용하기 전에 신중히 검토하세요.