현재 위치: > 최신 기사 목록> sub 도메인 이름을 얻기 위해 parse_url을 사용할 때 무엇에주의를 기울여야합니까?

sub 도메인 이름을 얻기 위해 parse_url을 사용할 때 무엇에주의를 기울여야합니까?

gitbox 2025-05-29

PHP에서 Parse_url은 URL을 구문 분석하고 체계, 호스트, 경로 등과 같은 다양한 부분을 추출하는 매우 실용적인 기능입니다. 그러나 하위 도메인 이름을 얻기위한 요구 사항에서 Parse_url은 "하위 도메인 이름"필드를 직접 제공하지 않으므로 호스트 의 추가 구문 분석의 도움으로 목표를 달성해야합니다. 그러나이 과정에서 쉽게 간과되는 구덩이와 세부 사항이 있으므로 아래에서 자세히 논의 할 것입니다.

1. parse_url은 URL 합법성을 확인하지 않습니다

parse_url은 표준 URL이 아니더라도 통과 한 문자열을 구문 분석하려고합니다. 예를 들어:

 $url = 'not-a-valid-url';
$parsed = parse_url($url);
print_r($parsed);

현재 $ parsed는 정보의 일부만 리턴 할 수 있으며 예상대로 구조조차 완전히 충족되지 않습니다. 따라서 parse_url을 사용하기 전에 URL 합법성을 확인하거나 적어도 http : // prefix를 추가하는 것이 가장 좋습니다.

 if (!preg_match('#^https?://#', $url)) {
    $url = 'http://' . $url;
}

2. 하위 도메인을 얻으려면 호스트 필드를 추가로 구문 분석해야합니다.

parse_url은 호스트를 반환하지만 하위 도메인 이름을 직접 제공하지는 않습니다. 예를 들어:

 $url = 'https://sub.gitbox.net/path';
$parsed = parse_url($url);
echo $parsed['host']; // 산출 sub.gitbox.net

우리는이 호스트를 스스로 나누어야합니다. 일반적인 관행은 이용 을 사용하는 것입니다.

 $hostParts = explode('.', $parsed['host']);

결과가 [ 'sub', 'gitbox', 'net'] 인 경우 하위 도메인으로 간주 될 수 있습니다. 그러나 이것은 특히 다음 상황에서 항상 정확한 것은 아닙니다.

3. 기본 도메인 이름의 구조는 항상 두 세그먼트가 아닙니다.

일부 국가에는 Co.ukCom.cn 과 같은 2 층 구조가 있습니다. 우리가 단순히 마지막 두 필드를 기본 도메인 이름으로, 나머지를 하위 도메인으로 취급하면 오류가 발생합니다. 예를 들어:

 $url = 'https://sub.example.co.uk';
$parsed = parse_url($url);
$hostParts = explode('.', $parsed['host']);

결과는 [ 'sub', 'example', 'co', 'uk'] 입니다 .

이 문제를 해결하려면 공개 접미사 목록 (공개 접미어 목록)을 소개하거나 Jeremykendall/PHP-Domain-Parser 와 같은 타사 라이브러리를 사용하여 기본 도메인과 하위 도메인 간의 경계를 정확하게 결정해야합니다.

4. IPv6 및 IP 주소의 특수 처리에주의를 기울이십시오.

URL이 IP 주소를 호스트 이름으로 사용하는 경우 자연스럽게 "sub 도메인 이름"이라는 개념이 없습니다.

 $url = 'http://192.168.1.1';
$parsed = parse_url($url);
echo $parsed['host']; // 산출 192.168.1.1

IPv6 주소는 더 복잡하고 괄호가 포함되어 있습니다.

 $url = 'http://[2001:db8::1]';
$parsed = parse_url($url);
echo $parsed['host']; // 산출 [2001:db8::1]

이러한 상황 중 어느 것도 실수로 하위 도메인이있는 도메인 이름으로 취급되어서는 안됩니다.

5. 포트 번호의 영향을 무시하지 마십시오

parse_url 은 포트 번호를 분리합니다.

 $url = 'http://sub.gitbox.net:8080';
$parsed = parse_url($url);

그러나 하위 도메인 이름을 추출 할 때 호스트 에주의를 기울여야하며 포트 번호에 의해 방해해서는 안됩니다. 때로는 정기적 인 추출 도메인 이름을 사용할 때 실수로 포트를 모아 잘못 판단됩니다.

요약

parse_url을 사용하여 하위 도메인을 추출하는 것은 여러 경계 상황이 포함 된 한 가지 크기의 문제가 아닙니다. 우리는 추천합니다 :

  • 표준 형식을 보장하기 전에 URL을 전처리하십시오.

  • 구문 분석 후 신뢰할 수있는 방법을 사용하여 주 영역과 하위 도메인을 추출하십시오.

  • 최상위 및 1 차 도메인 경계를 식별 할 수있는 가능한 경우 공개 접미사 목록을 사용합니다.

  • IP 주소 및 IPv6의 특수 처리;

  • 포트 번호, 프로토콜 접두사 등과 같은 간섭 요소에주의하십시오.

이러한 세부 사항을 종합적으로 고려해야만 URL 파싱으로 돌진하지 않고보다 강력한 시스템을 구축 할 수 있습니다.