parse_url()
함수의 정의 및 사용법
parse_url()
함수는
주어진 URL 문자열을 구문 분석하여
scheme
, host
, port
, user
, pass
, path
, query
, fragment
와 같은 구성 요소를 반환합니다.
이때, URL에 포함된 구성 요소만 반환되고 구성 요소에 없으면 NULL
을 반환합니다.
사용법 참고 사항
URL 구성 요소에 대한 사전 지식이 있습니다.
URL은 일반적으로 다음과 같은 여덟 가지 요소로 나눌 수 있습니다.
이 여덟 가지 요소 중에서 scheme과 host는 URL 구성에 반드시 필요한 요소이지만, 나머지 구성 요소들은 특정 상황이나 용도에 따라 선택적으로 URL에 구성할 수 있습니다.
scheme
: 프로토콜을 나타냅니다. 예시: HTTP, HTTPS, FTP 등이 있습니다.user
: 인증이 필요한 경우 사용자 이름을 나타냅니다. 예시: username (예, ftp://username@host)pass
: 인증이 필요한 경우 사용자 비밀번호를 나타냅니다. 예시: password (예, ftp://username:password@host)host
: 서버의 도메인 이름이나 IP 주소를 나타냅니다. 예시: www.example.com, 192.168.1.1port
: 서버와 통신하기 위해 사용하는 포트 번호를 나타냅니다. 기본 포트가 아닌 경우에만 명시합니다. 예를 들어, HTTP 프로토콜의 기본 포트는 80이고, HTTPS의 기본 포트는 443입니다. 예시: 8080 (예, http://www.example.com:8080)path
: 서버 내의 특정 리소스를 가리키는 경로를 나타냅니다. 예시: /path/to/resource (예, http://www.example.com/path/to/resource)query
: URL의 추가 매개변수를 나타내며, ?로 시작하고 &로 구분됩니다. 예시: ?key1=value1&key2=value2 (예, http://www.example.com/path?key1=value1&key2=value2)fragment
: 리소스 내의 특정 부분을 가리키며, #로 시작합니다. 예시: #section1 (예, http://www.example.com/path#section1)
parse_url()
함수의 형식은 다음과 같습니다.
구문
매개변수
$url |
필수. 분석할 URL입니다. 이 매개변수는 URL 문자열입니다. |
---|---|
$component |
옵션. 반환할 구성 요소를 지정하는데 사용됩니다. 기본값은 -1 이며, 이는 모든 구성 요소를 연관 배열로 반환함을 의미합니다.
그리고, 다음 값 중 하나를 사용하면 특정 구성 요소만을 반환할 수 있습니다.
|
반환 값
연관 배열 또는 구성 요소 값: 지정된 $component
에 따라 다르게 반환됩니다.
$component
가 지정되지 않은 경우: URL에 포함된 구성 요소를 연관 배열로 반환합니다. URL의 구성 요소는 연관 배열의 키가 되고 구성 요소의 값은 키의 값이 됩니다. URL에 포함되지 않는 구성 요소는 반환되는 연관 배열에 존재하지 않습니다. 따라서, URL에 포함되지 않는 구성 요소를 반환되는 연관 배열의 키로 접근하면NULL
이 반환됩니다.$component
가 지정된 경우: 문자열 (또는PHP_URL_PORT
의 경우 정수)로 해당 구성 요소의 값이 반환됩니다. 구성 요소가 없을 경우NULL
이 반환됩니다.
반환되는 값은 URL로 디코딩되지 않습니다.
PHP 8.0.0을 기준으로 변경된 로그가 있습니다.
PHP 8.0.0 이전 | parse_url() 함수가 반환하는 query 와 fragment 요소는 URL에 해당 구성 요소가 없는 경우에는 모두 NULL 로 설정되었습니다. |
---|---|
PHP 8.0.0 이후 | URL에 쿼리나 fragment 가 비어있는 경우와 실제로 존재하지 않는 경우를 구별합니다. |
심각하게 잘못된 URL의 경우 parse_url()
함수는 false
를 반환할 수 있습니다.
주의할 점
parse_url()
함수는 부분적이고 유효하지 않은 URL도 허용되지만, 주어진 URL의 유효성을 검증하지 않는다는 점에 유의해야 합니다.
메모
- 이 함수는 URI가 아닌 URL을 구문 분석하기 위한 목적으로 특별히 고안되었습니다.
그러나 PHP의 이전 버전과의 호환성 요구 사항을 준수하기 위해 삼중 슬래시(file:///...)가 허용되는 file:// 체계에 대한 예외를 만듭니다. 다른 구성표의 경우 이는 유효하지 않습니다. - 이 함수는 상대 URL에서 올바른 결과를 제공하지 않을 수 있습니다.
URL의 유효성 검증
parse_url()
함수는 URL의 구성 요소를 분석하는 데 사용되며, URL의 유효성을 검사하는 데는 적합하지 않습니다. URL의 유효성을 검사하려는 경우 PHP에서는 filter_var()
함수와 FILTER_VALIDATE_URL
필터를 사용하는 것이 좋습니다.
filter_var()
함수와 FILTER_VALIDATE_URL
필터를 사용하면 간단하게 URL의 유효성 검사를 할 수 있습니다.
올바른 URL 형식인지를 확인하기 위해 filter_var()
함수를 사용하는 간단한 예제를 살펴보겠습니다.
일러두기
소개하는 예제 코드가 모든 URL을 정확히 유효한지 검증하는 데에는 한계가 있습니다. 추가적인 적절한 조치가 필요할 수 있습니다. 또한 보안 관련 목적으로 참조할 경우에는 보안에 관련된 유효성 검증에 대한 조치가 추가로 필요합니다.
이렇게 함으로써 filter_var()
함수를 사용하여 URL의 유효성을 간단하게 확인할 수 있습니다.
parse_url()
함수는 URL의 구성 요소를 분석하는 데에만 사용해야 합니다.