PHP 사전 정의 변수란?
모든 PHP 스크립트는 다양한 사전 정의 변수(predefined variables)에 접근할 수 있습니다. 다만 이들 변수 대부분은 웹 서버 소프트웨어, PHP 버전, 기타 실행 환경에 따라 그 내용이 달라지며, 일부 변수는 명령줄(CLI) 모드에서 실행되는 스크립트에서는 사용할 수 없습니다. $GLOBALS 변수는 전역적으로 사용 가능한 모든 사전 정의 변수에 대한 참조를 저장하며, 이들 대부분은 phpinfo() 함수를 통해 확인할 수 있습니다. 이 글에서는 실무에서 자주 사용되는 주요 사전 정의 변수들을 하나씩 살펴보겠습니다.
$_SERVER
$_SERVER는 HTTP 헤더, 스크립트 경로, 실행 환경에 관한 정보를 담고 있는 배열 변수입니다. 이 배열의 주요 멤버는 다음과 같습니다.
PHP_SELF
현재 실행 중인 스크립트의 파일명을 저장합니다. 예를 들어 로컬 서버 문서 루트의 test 폴더에 있는 스크립트라면 다음과 같은 경로를 반환합니다.
<?php echo $_SERVER['PHP_SELF']; ?>
브라우저에서 https://localhost/test/testscript.php URL로 접속하면 다음과 같은 결과가 출력됩니다.
/test/testscript.php
SERVER_ADDR
현재 스크립트가 실행 중인 서버의 IP 주소를 반환합니다.
SERVER_NAME
현재 스크립트가 실행 중인 서버 호스트의 이름을 반환합니다. 로컬에서 실행 중인 서버라면 localhost가 반환됩니다.
QUERY_STRING
쿼리 문자열(query string)은 key=value 쌍을 & 기호로 연결한 뒤 URL 끝에 ? 기호를 붙여 추가하는 문자열입니다. 예를 들어 https://localhost/testscript?name=xyz&age=20 URL은 name=xyz&age=20이라는 쿼리 문자열을 반환합니다.
REQUEST_METHOD
URL에 접근할 때 사용된 HTTP 요청 방식(GET, POST, PUT, DELETE 등)을 나타냅니다. 위 쿼리 문자열 예제처럼 ? 기호와 함께 쿼리 문자열이 붙은 URL은 GET 방식으로 페이지를 요청합니다.
DOCUMENT_ROOT
서버에서 문서 루트(document root)로 설정된 디렉터리 이름을 반환합니다. XAMPP 아파치 서버에서는 htdocs가 문서 루트로 반환됩니다.
C:/xampp/htdocs
HTTP_USER_AGENT
현재 페이지에 접근 중인 사용자 에이전트(브라우저) 정보를 나타내는 문자열입니다.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
REMOTE_ADDR
사용자가 현재 페이지를 보고 있는 클라이언트 컴퓨터의 IP 주소입니다.
SERVER_PORT
웹 서버가 들어오는 요청을 수신 대기 중인 포트 번호입니다. 기본값은 80입니다.
$_GET
기본적으로 클라이언트 브라우저는 HTTP GET 방식으로 서버의 URL을 요청합니다. URL에 붙은 쿼리 문자열에는 & 기호로 연결된 key=value 쌍이 포함될 수 있으며, $_GET 연관 배열이 이러한 키-값 쌍을 저장합니다.
브라우저의 URL이 https://localhost/testscript?name=xyz&age=20라고 가정해 보겠습니다.
<?php echo "이름 : " . $_GET["name"] . "<br>"; echo "나이 : " . $_GET["age"]; ?>
실행 결과는 다음과 같습니다.
이름 : xyz 나이 : 20
$_POST
HTTP POST 방식으로 전달된 키-값 쌍의 연관 배열입니다. 요청 시 URLEncoded 또는 multipart/form-data 콘텐츠 타입을 사용합니다.
HTML 폼(test.html)에서 method 속성을 POST로 지정하면 데이터가 POST 방식으로 PHP 스크립트에 전송됩니다.
<form action="testscript.php" method="POST"> <input type="text" name="name"> <input type="text" name="age"> <input type="submit" value="제출"> </form>
이 데이터를 받는 PHP 스크립트는 다음과 같습니다.
<?php echo "이름 : " . $_POST["name"] . "<br>"; echo "나이 : " . $_POST["age"]; ?>
실행 결과는 다음과 같습니다.
이름 : xyz 나이 : 20
$_FILES
HTTP POST 방식으로 업로드된 항목들을 담는 연관 배열입니다. 파일을 업로드하려면 enctype 속성이 multipart/form-data로 설정된 POST 방식의 폼이 반드시 필요합니다.
<form action="testscript.php" method="POST" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="업로드"> </form>
PHP 스크립트에서 $_FILES 변수는 다음과 같이 접근할 수 있습니다.
<?php print_r($_FILES); ?>
출력 결과:
Array ( [file] => Array ( [name] => hello.html [type] => text/html [tmp_name] => C:\xampp\tmp\php9647.tmp [error] => 0 [size] => 56 ) )
$_REQUEST
$_GET, $_POST, $_COOKIE 세 가지 사전 정의 변수의 내용을 모두 포함하는 연관 배열입니다.
$_SESSION
HTTP 세션을 나타내는 변수들의 연관 배열입니다. 세션 기반 로그인 상태 유지 등에 활용됩니다.
$_ENV
환경 변수(environment variables)들의 배열입니다. 이 변수들은 PHP의 전역 네임스페이스로 가져와집니다.
$_COOKIE
서버는 쿠키(cookie) 형태로 클라이언트 컴퓨터에 특정 데이터를 저장할 수 있으며, 이 쿠키들은 요청이 있을 때마다 함께 전송됩니다. $_COOKIE 변수는 쿠키 변수와 그 값들을 담는 연관 배열입니다.