Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP에서 IP 주소의 국가 정보를 기반으로 도메인을 자동으로 리디렉션하는 방법

웹 서비스를 운영하다 보면 방문자의 위치(국가)에 따라 다른 도메인이나 언어 페이지로 자동 연결해야 하는 경우가 있습니다. PHP에서는 GeoIP 확장 모듈을 활용하면 IP 주소의 정확한 지리적 위치를 파악할 수 있으며, 이를 통해 손쉽게 국가별 리디렉션을 구현할 수 있습니다.

1. geoPlugin 클래스 준비하기

GeoIP 확장 외에도 별도 설치 없이 사용할 수 있는 geoPlugin 클래스가 유용합니다. 아래 링크에서 클래스 파일을 다운로드할 수 있습니다.

https://www.geoplugin.com/_media/webservices/geoplugin.class.phps

또한 각 국가를 식별하기 위한 ISO 국가 코드 목록은 아래 링크에서 확인할 수 있습니다.

https://www.geoplugin.com/iso3166

2. index.php 작성하기

다운로드한 geoplugin.class.php 파일과 함께 웹 서버 루트 폴더에 index.php 파일을 생성하고, 아래 코드를 입력합니다.

<?php
require_once('geoplugin.class.php');
$geoplugin = new geoPlugin();
$geoplugin->locate();
// 국가 코드를 담을 변수 생성
$var_country_code = $geoplugin->countryCode;
// 국가 코드에 따른 리디렉션 처리
if ($var_country_code == "AL") {
    header('Location: https://sq.wikipedia.org/');
}
else if ($var_country_code == "NL") {
    header('Location: https://nl.wikipedia.org/');
} else {
    header('Location: https://en.wikipedia.org/');
}
?>

3. 코드 동작 원리

위 코드의 실행 흐름은 다음과 같습니다.

먼저 geoplugin 클래스 파일을 불러온 뒤, 새 인스턴스를 생성하고 이름을 'geoplugin'으로 지정합니다. 이어서 해당 인스턴스에서 locate() 함수를 호출하여 현재 접속자의 IP 주소를 기반으로 위치 정보를 조회합니다.

조회된 위치 정보 중 countryCode(국가 코드) 값을 'var_country_code'라는 변수에 할당합니다. 그다음 if 조건문을 사용하여 국가 코드가 'AL'(알바니아)인지, 'NL'(네덜란드)인지 등을 순차적으로 검사하고, 조건에 일치하면 header() 함수를 통해 해당 국가의 도메인으로 리디렉션합니다. 어느 조건에도 해당하지 않는 경우에는 기본 도메인(영문 페이지)으로 이동시킵니다.

4. 참고 사항

header() 함수는 어떤 출력(HTML, 공백, 빈 줄 등)보다 반드시 먼저 호출되어야 합니다. 이미 출력이 시작된 상태에서 호출하면 "headers already sent" 오류가 발생하므로 주의해야 합니다. 또한 실제 서비스에서는 더 많은 국가를 지원하기 위해 switch 문이나 매핑 배열을 활용하면 코드를 더 깔끔하게 관리할 수 있으며, geoPlugin API는 외부 요청을 수반하므로 응답 속도와 캐싱 전략도 함께 고려하는 것이 좋습니다.