■ CGI 환경변수
모든 환경 변수 목록은 phpinfo( ) 함수로 확인할 수 있습니다.
ex #01)
이렇게 선언된 변수는 다음과 같은 방법으로 가져올 수 있습니다. 이 특별한 변수는 함수에서도 global 선언 없이 바로 사용할 수 있습니다.
√ $_SERVER['환경변수']; √ $GLOBALS['_SERVER']['환경변수']; √ $_ENV['환경변수']; √ GETENV('환경변수'); |
PHP는 실행되는 스크립트에 적용이 되는 상당량의 "미리 선언된 변수"를 제공합니다. 하지만 이 변수의 대부분은 운영되는 서버, 서버의 버전, 서버의 설정, 다른 팩터와 관련되어 있어서 보안에 문제시 될 수 있습니다. 그런 이유로 PHP 4.2.0 이후 버전부터, php.ini인 register_globals의 기본값이 off 로 셋팅됩니다.
register_globals를 off로 설정하면, 전역 유효영역 안의 미리 선언된 변수 집합들에 영향을 미치는데, 예를 들면, DOCUMENT_ROOT 값을 얻기 위해서 $DOCUMENT_ROOT로 변수를 사용하는 대신에 $_GET['id']로, $HOME 대신에 $_ENV['HOME']으로 변수 사용의 접근을 권고하고있고, 이 형태는 보안상으로도 유효합니다.
CGI 환경변수에는 서버에서 전달된 요청에 대한 데이터를 포함하는데, 다음 표는 웹 서버에서 설정하는 HTTP 헤더 환경변수들을 나타냅니다.
변수 | 의미 |
AUTH_TYPE | · 인증방법 |
CONTENT_LENGTH | · STDIN으로 전달된 데이터 길이 |
CONTENT_TYPE | · STDIN으로 전달된 데이터 타입 |
DOCUMENT_ROOT | · 루트 디렉터리 |
GATEWAY_INTERFACE | · CGI 버전 |
HTTP_ACCEPT | · 클라이언트 MIME 타입 |
HTTP_ACCEPT_CHARSET | · 클라이언트 문자셋. Ex : 'ISO-8859-1, *, UTF-8 |
HTTP_ACCEPT_ENCODING | · 클라이언트 인코딩. Ex : gzip |
HTTP_ACCEPT_LANGUAGE | · 클라이언트 언어. Ex : en, ko |
HTTP_CONNECTION | · 클라이언트 연결상태 |
HTTP_HOST | · 서버 호스트 이름 |
HTTP_COOKIE | · 세션 쿠키 값 |
HTTP_PEFERER | · 이전 URL |
HTTP_USER_AGENT | · 클라이언트 브라우저 정보 |
HTTPS | · HTTP 접속 프로토콜 |
ORIG_PATH_INFO | · PATH_INFO 원래 이름 |
PATH_INFO | · 전달된 추가 경로 정보 |
PATH_TRANSLATED | · PATH_INFO 변환버전 |
PHP_AUTH_DIGEST | · 클라이언트가 보낸 인증헤더로 설정(유효성 검사를 만들 때 사용합니다.) |
PHP_AUTH_PW | · 사용자가 제공하는 사용자 패스워드 |
PHP_AUTH_USER | · 사용자가 제공하는 사용자 이름 |
PHP_SELF | · 현재 실행중인 스크립트의 파일 이름 |
QUERY_STRING | · 쿼리 문자열(폼의 내요을 질의된 문자열) |
REMOTE_ADDR | · 클라이언트 IP 주소 |
REMOTE_HOST | · 클라이언트 호스트 이름 |
REMOTE_PORT | · 요청을 보낸 사용자 |
REMOTE_USER | · 인증된 사용자 이름 |
REDIRECT_REMOTE_USER | · 인증된 사용자는 요청이 내부적으로 리디렉션됨. |
REQUEST_METHOD | · 요청 메소드(GET of Post) |
REQUEST_TIME | · 요청 시작된 타임 스탬프. php5.1.0부터 |
REQUEST_URI | · 현재 페이지에 엑세스한 파일 경로 URI. Ex : /index.html |
SCRIPT_FILENAME | · 현재 수행되는 스크립트의 절대 경로명 |
SCRIPT_NAME | · 서버 IP 주소 |
SERVER_ADMIN | · SERVER_ADMIN (아파치) 웹 서버 구성 파일 지시문에 지정된 값 |
SERVER_NAME | · 서버 호스트 이름 |
SERVER_PORT | · 서버 포트 번호 |
SERVER_PROTOCOL | · 서버 프로토콜 버전 |
SERVER_SIGNATURE | · 가상 호스트 이름을 포함하는 문자열 |
SERVER_SOFTWARE | · 서버소프트웨어 이름과 버전 |
HTTP_HOST와 SERVER_NAME의 차이를 말하자면, SERVER_NAME은 Apache의 ServerName을 말하며, HTTP_HOST는 Apache인 virtualHost 에서 설정한 ServerName를 말하는데, 한 서버에 수 개의 호스트이름이 있다면 2개의 값이 달라진다는 점에 있습니다.
HTTP_*로 시작하는 변수는 헤더변수로서 브라우저의 요청에 의해 만들어지고, 클라이언트의 컴퓨터 환경적 정보가 담깁니다. 이를 통해 클라이언트 브라우저 종류나 언어, IP주소, 접속경로로 다양한 방문자접속 통계프로그램을 만들 수 있는 것입니다.
ex #02)
ex #03)
보안에 어느 정도 유효성을 갖고 있다면 register_globals 를 off로 해두는 게 좋으며, $_SERVER나 getenv() 함수를 이용해 환경변수를 가져 오도록 습관을 드려야 합니다.
'PHP > PHP Programming' 카테고리의 다른 글
[PHP] 가변변수 (0) | 2015.03.29 |
---|---|
[PHP] 정적변수 (0) | 2015.03.29 |
[PHP] 함수의 기본 문법 (0) | 2015.03.17 |
[PHP] 세션 (0) | 2014.12.26 |
[PHP] 쿠키 (0) | 2014.12.26 |