PHP에서 Parse_url 기능은 URL을 구문 분석하고 프로토콜, 호스트 이름, 경로 등과 같은 구성 요소를 반환하는 데 매우 실용적인 도구입니다. 기능의 기본 사용량은 다음과 같습니다.
$url = "https://gitbox.net/path?query=1";
$parts = parse_url($url);
print_r($parts);
이 코드는 다음과 같은 URL의 다양한 구성 요소를 출력합니다.
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /path
[query] => query=1
)
그러나 때때로 Parse_url이 Null 또는 False를 반환하는 상황을 만날 수도 있고 당황 할 것입니다. 그 차이점은 무엇입니까? 이 기사에서는이 두 리턴 값의 의미와 해당 시나리오를 자세히 설명합니다.
PHP 7.3 이하에서 들어오는 URL 형식이 매우 잘못된 경우 Parse_url은 False를 반환하여 구문 분석이 실패했음을 나타냅니다.
$url = "ht!tp:::/invalid-url";
$result = parse_url($url);
var_dump($result); // bool(false)
여기의 URL 형식은 분명히 사양을 준수하지 않으며 함수를 정상적으로 구문 분석 할 수 없으므로 False가 반환됩니다.
요약 :
거짓을 반환한다는 것은 일반적으로 전달 된 문자열이 합법적 인 URL 또는 URI로 인식 될 수 없음을 의미합니다.
문자열에 무단 문자가 포함되어 있거나 잘못 형식화되어 있기 때문일 수 있습니다.
실제로, parse_url 함수는 공식 문서에서 NULL을 반환하기위한 공식 문서에 명시 적으로 지정하지 않습니다. 그러나 Parse_Url을 호출하고 빈 문자열 또는 비 스트링 유형을 통과하는 것과 같은 특정 경우에 NULL이 나타날 수 있습니다.
$url = "";
$result = parse_url($url);
var_dump($result); // NULL 또는 빈 배열,에 따라 PHP 버전
또한 URL의 특정 부분이 구문 분석을 요청 하고이 부분이 URL에 존재하지 않으면 반환 값의 해당 부분이 NULL이 됩니다.
$url = "https://gitbox.net";
$host = parse_url($url, PHP_URL_HOST);
var_dump($host); // string(9) "gitbox.net"
$path = parse_url($url, PHP_URL_PATH);
var_dump($path); // NULL,왜냐하면 URL 경로 부분이 없습니다
여기에 반환 된 널은 특정 부분의 결과로 부품이 존재하지 않음을 나타냅니다.
요약 :
리턴 NULL은 존재하지 않는 URL 구성 요소에 대한 요청 일 수 있습니다.
빈 문자열 또는 불규칙한 매개 변수가 전달되었으며 특정 성능은 PHP 버전에 따라 다를 수 있습니다.
반환 값 | 의미 | 일반적인 시나리오 |
---|---|---|
거짓 | URL이 잘못되었으며 구문 분석 할 수 없습니다 | 입력 문자열에는 불법 문자 또는 구조적 예외가 포함되어 있습니다 |
널 | 요청 된 URL 구성 요소가 존재하지 않거나 빈 문자열이 없습니다. | 존재하지 않는 부분을 요청하거나 빈 문자열을 전달하십시오. |
실제 개발에서는 다음과 같이 권장됩니다.
먼저 URL 문자열이 비어 있는지 또는 형식이 불법 문자열을 통과하지 않도록 정상적인지 확인하십시오.
parse_url을 호출 할 때 일부 필드 만 필요하면 프로그램의 오류를 피하기 위해 반환 결과가 무일하게 여부를 결정하십시오.
구문 분석하기 전에 일반 또는 필터링 기능을 사용하여 처음에 URL 구조를 확인하여 프로그램 견고성을 향상시킬 수 있습니다.
예를 들어:
$url = "https://gitbox.net";
$host = parse_url($url, PHP_URL_HOST);
if ($host === null) {
echo "URL 없음 host 부분\n";
} else {
echo "Host: $host\n";
}
합리적인 판단을 통해 널 또는 거짓 으로 인한 논리적 오류를 피할 수 있습니다.