정의 및 사용 방법
- PHP 버전
- 5+
get_headers()
함수는 지정한 URL로 HTTP 요청을 보내고 서버가 반환하는 응답 헤더 전체를 배열로 반환합니다.
이 함수는 주로 URL이 살아 있는지, 접근 가능한지 사전 유용성 확인용으로 사용됩니다.
💡 주의하세요!
로컬 파일 시스템 경로(C:\xampp\htdocs\file.txt
등)는 HTTP 요청이 아니므로 get_headers()
로 확인할 수 없습니다.
💡 주의하세요!
get_headers()
는 PHP 설정 allow_url_fopen
이 On
이어야 정상 작동합니다. Off
상태에서는 외부 URL 요청이 차단되어 예제 코드 실행 시 에러가 발생할 수 있습니다. 필요 시 php.ini
파일에서 allow_url_fopen = 1
로 변경해야 합니다.
기본 예제
다음은 get_headers()
함수로 'http://example.com'
을 URL로 가지는 사이트가 살아 있는지, 접근 가능한지 사전 유용성을 체크하는 방법을 보여줍니다.
$url = 'http://example.com'; // 검사할 URL을 변수에 할당합니다.
$headers = get_headers($url); // get_headers() 함수를 호출하여 해당 URL의 모든 응답 헤더를 배열로 가져옵니다.
/*
* $headers[0]는 응답의 첫 번째 줄(상태 코드)인 'HTTP/1.1 200 OK'를 가리킵니다.
* strpos() 함수를 이용해 이 문자열 안에 '200'이 포함되어 있는지 확인합니다.
* 200은 성공적인 응답을 의미하는 상태 코드입니다.
**/
if (strpos($headers[0], '200') !== false) { // 200 코드가 발견되면 URL이 정상적으로 작동한다고 출력합니다.
echo 'URL이 유효합니다.';
} else { // 200 코드가 없으면 접근할 수 없다고 출력합니다.
echo 'URL에 접근할 수 없습니다.';
}
코드 부연설명
strpos()
함수는 대소문자를 구분해서 문자열에 특정 문자가 포함되어 있는지를 확인합니다.
구문
get_headers(string $url, bool $associative = false, ?resource $context = null): array|false
매개변수
$url |
헤더 정보를 가져올 대상 URL입니다. 문자열로 지정합니다. |
---|---|
$associative |
옵션.
반환되는 배열을 연관 배열로 지정할지 여부를 제어합니다.
|
$context |
옵션.
stream_context_create() 함수로 생성된 유효한 컨텍스트 리소스입니다. 특정 옵션(예: 타임아웃, 사용자 에이전트)을 설정할 때 사용하며, 기본값은 null 입니다. |
반환 값
- 배열(
array
) - 성공적으로 헤더를 가져온 경우, 헤더 정보를 담은 배열을 반환합니다.
$associative
가true
일 경우 연관 배열,false
일 경우 인덱스 배열입니다.
- 배열(
false
-
헤더를 가져오는 데 실패한 경우(예: 잘못된 URL, 네트워크 오류 등)
false
를 반환합니다.
변경 이력
PHP 8.0.0 | $associative 매개변수 타입이 int 에서 bool 로 변경되었습니다. 이전에는 $associative 가 0 또는 1 로 지정했습니다. 하지만 이제는 명확하게 true 또는 false 를 사용해 지정합니다. |
---|---|
PHP 7.1.0 | $context 매개변수가 추가되었습니다. |
예제
이 예제들에서는 get_headers()
함수를 사용하여 웹사이트의 유효성을 확인하고, HTTP 응답 헤더가 어떻게 반환되는지 보여줍니다.
모든 헤더 정보 확인
get_headers()
의 두 번째 매개변수인 $associative
를 기본값인 false
로 설정하여 반환하는 인덱스 배열의 값과 true
로 설정하여 문자열 타입의 헤더 이름을 키로 하는 연관 배열을 얻는 예제입니다.
$url = 'http://www.example.com';
// $associative를 기본값인 false로 설정: 인덱스 배열 반환
print_r(get_headers($url));
// $associative를 true로 설정: 문자열 타입의 헤더 이름을 키로 하는 연관 배열 반환
print_r(get_headers($url, true));
Array ( [0] => HTTP/1.1 200 OK [1] => Server: nginx/1.22.1 [2] => Date: Tue, 23 Sep 2025 12:10:32 GMT [3] => Content-Type: text/html; charset=utf-8 [4] => Content-Length: 750 [5] => Last-Modified: Mon, 22 Sep 2025 23:26:00 GMT [6] => Connection: close [7] => ETag: "68d1db08-2ee" [8] => Accept-Ranges: bytes ) Array ( [0] => HTTP/1.1 200 OK [Server] => nginx/1.22.1 [Date] => Tue, 23 Sep 2025 12:12:26 GMT [Content-Type] => text/html; charset=utf-8 [Content-Length] => 750 [Last-Modified] => Mon, 22 Sep 2025 23:26:00 GMT [Connection] => close [ETag] => "68d1db08-2ee" [Accept-Ranges] => bytes )
리다이렉션 확인
웹 페이지가 다른 URL로 리다이렉션되는지 확인할 수 있습니다.
$headers = get_headers('https://example.com', true);
if (isset($headers['Location'])) {
echo "리다이렉션 URL: " . $headers['Location'];
}
파일 존재 여부 및 다운로드 가능 여부 확인
외부 서버의 이미지, PDF 등 리소스가 존재하는지 미리 확인할 때 활용합니다. 파일 크기 확인도 가능합니다.
$headers = get_headers('https://example.com/file.pdf', true);
if (isset($headers['Content-Length'])) {
echo "파일 크기: " . $headers['Content-Length'] . " 바이트";
}
서버 정보 확인 / 메타데이터 확인
서버에서 보내는 'Content-Type'
, 'Last-Modified'
, 'Server'
등의 정보를 확인할 수 있습니다.
$headers = get_headers('https://example.com', true);
echo "컨텐츠 타입: " . $headers['Content-Type'];