정의 및 사용 방법
- 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를 반환합니다. 
변경 이력
| 버전 | 설명 | 
|---|---|
| 8.0.0 | $associative 매개변수 타입이 int에서 bool로 변경되었습니다. 이전에는 $associative가 0 또는 1로 지정했습니다. 하지만 이제는 명확하게 true 또는 false를 사용해 지정합니다. | 
											
| 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'];