이 름 | 기 능 |
$GLOBALS | 스크립트 중에서 이용할 수 있는 모든 변수에 대한 레퍼런스를 취득합니다. |
$_SERVER | Web 서버나 실행중인 스크립트에 관한 정보를 취득 합니다. |
$_GET | HTTP 프로토콜의 GET 메소드에 의해 서식에서 스크립트로 보내지는 값을 취득합니다. |
$_POST | HTTP 프로토콜의 POST 메소드에 의해 서식에서 스크립트로 보내지는 값을 취득합니다. |
$_COOKIE | HTTP Cookie 에 의해 스크립트로 보내지는 쿠키를 취득합니다. |
$_FILES | 서식의 HTTP POST 파일 업로드에 의해 스크립트로 보내지는 정보를 취득합니다. |
$_ENV | 환경변수를 취득합니다. |
$_REQUEST | $_GET, $_POST, $_COOKIE, $_FILES 의 값을 취득합니다. |
$_SESSION | 스크립트의 세션 변수에 관한 정보를 취득합니다. |
환경변수
$_SERVER 에서 참조할 수 있는 것은 Web 서버나 브라우저에 관한 정보입니다.
$_ENV 에서 참조할 수 있는 것은 Web 서버가 동작하고 있는 컴퓨터 시스템에 관한 정보입니다.
$_SERVER
환경 변수명 | 의미 | 값(예) |
HTTP_REFERER | 직전 통신에서 호출처의 URL | http://localhost/phpbook/ |
HTTP_USER_AGENT | 직전 통신에서 클라이언트의 브라우저나 OS에 관한 정보 | Mozilla/4.0 (compatible; MSIE 6.0; Window NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) |
HTTP_HOST | 웹 서버의 호스트명 | localhost |
SERVER_SOFTWARE | 웹 서버와 PHP 의 버전 | Apache/2.0.59 (Win32) PHP/5.1.6 |
SERVER_ADDR | 서버의 IP 어드레스 | 127.0.0.1 |
REMOTE_ADDR | 클라이언트의 IP 어드레스 | 127.0.0.2 |
DOCUMENT_ROOT | 웹 서버의 도큐먼트 패스 | c:/Program Files/ApachGroup/ Apache2/htdocs |
SERVER_ADMIN | 웹 서버 관리자의 메일 어드레스 | PHP@ank.co.kr |
SERVER_PROTOCOL | 웹 서버가 사용하는 프로토콜과 그 버전 | HTTP/1.1 |
REQUEST_METHOD | 직전 통신에서 데이터를 주고 받는 방법 | GET |
COMPUTERNAME | 컴퓨터명 | SHIORI |
파일업로드 관련변수 (책 p623)
변수 | 내용 |
$_FILES['upfile']['name'] | 업로드 된 파일명 |
$_FILES['upfile']['type'] | MIME 형식. 예를 들면 이미지인지 동영상 파일인지 (images/gif, images/jpg 등등) |
$_FILES['upfile']['size'] | 업로드된 파일의 크기 |
$_FILES['upfile']['tmp_name'] | 업로드된 파일을 서버 측에서 임시로 저장해둔 이름 |
$_FILES['upfile']['error'] | 파일 업로드와 관련된 에러 코드 |
*참고 : upfile 는 넘어오는 파라미터 명
php.ini 파일에서
register_globals = On => 사용 예) $HTTP_HOST
Off => 사용 예) $_SERVER["HTTP_HOST"]
자주쓰는 환경변수
$_SERVER["SERVER_PROTOCOL"]; // 프로토콜을 읽어온다
$_SERVER["SERVER_NAME"]; // 현재접속중 인 서버 이름을 읽어 온다(도메인)
$_SERVER["SERVER_PORT"]; // 웹 서버가 사용하는 포트를 읽어온다.
$_SERVER["REQUEST_URI"]; // 현재 위치한 웹의 주소를 읽어온다.
$_SERVER["REQUEST_METHOD"]; // 전송방식을 읽는다(post,get)
$_SERVER["HTTP_REFERER"]; // 이동 이전 페이지의 경로를 기억한다
$_SERVER["HTTP_USER_AGENT"]; // POST방식을 이용하여 검색문에 정보가 들어있는 경우에 그 정보의 타입을 나타냅니다.
$_SERVER['HTTP_HOST']; // 사용자가 입력한 주소목록을 출력
php를 사용함에 있어서 환경적인 부분을 도와주는 것이 환경변수입니다.
참 용도가 많죠..
일례를 들면 프로그램을 만들다보면 인터넷환경, 서버 환경등의
정보가 필요할때가 있습니다.
그런 정보들을 쉽게 알수 있는 방법이 환경변수입니다.
즉, 누가 어느나라에서 방문했는지, 방문자의 브라우저는 어떤지,
서버의 구성은 뭔지... 등등 을 알수 있는게 환경변수입니다.
님이 이런걸 알고 싶을때는 꼭 필요한 변수기도 하구요.
일반적인 프로그래밍 할때는 꼭 필요하지 않지만,
쓰면 참 요긴하게 쓰입니다.
$_SERVER['DOCUMENT_ROOT'] = 현재 사이트가 위치한 서버상의 위치 => /webapp/include
$_SERVER['HTTP_ACCEPT_ENCODING'] = 인코딩 받식 => gzip, deflate
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 언어 => ko
$_SERVER['HTTP_USER_AGENT'] = 사이트 접속한 사용자 환경 => Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705
$_SERVER['REMOTE_ADDR'] = 사이트 접속한 사용자 IP => xxx.xxx.xxx.xxx
$_SERVER['HTTP_REFERER'] = 현제 페이지로 오기전의 페이지주소값 => http://www.test.net/index.php?user=??? (A태그나 form으로 전송시 값이 넘어옴. onclick으로 전송시 값이 넘어오지 않음)
$_SERVER['SCRIPT_FILENAME'] = 실행되고 있는 위치와 파일명 => webapp/include/index.php
$_SERVER['SERVER_NAME'] = 사이트 도메인 => www.test.com (버추얼 호스트에 지정한 도메인)
$_SERVER['HTTP_HOST'] = 사이트 도메인 => www.test.com (접속할 때 사용한 도메인)
$_SERVER['SERVER_PORT'] = 사이트가 사용하는 포트 => 80
$_SERVER['SERVER_SOFTWARE'] = 서버의 소프트웨어 환경 => Apache/1.3.23 (Unix) PHP/4.1.2 mod_fastcgi/2.2.10 mod_throttle/3.1.2 mod_ssl/2.8.6 OpenSSL/0.9.6c
$_SERVER['GATEWAY_INTERFACE'] = cGI 정보 => CGI/1.1
$_SERVER['SERVER_PROTOCOL'] = 사용된 서버 프로토콜 => HTTP/1.1
$_SERVER['REQUEST_URI'] = 현재페이지의 주소에서 도메인 제외 => /index.php?user=???&name=???
$_SERVER['PHP_SELF'] = 현재페이지의 주소에서 도메인과 넘겨지는 값 제외 = /default/index.php
*파일명만 가져올때 : basename($_SERVER['PHP_SELF']);
$_SERVER['APPL_PHYSICAL_PATH'] = 현재페이지의 실제 파일 주소 => D:\webapp/
$_SERVER['QUERY_STRING'] = get방식의 파일명 뒤에 붙어서 넘어오는 값 => ?user=???&name=??? (반드시get방식으로 넘겨야됨)
서버 변수: $_SERVER
참고: 4.1.0부터 지원됨. 이전 버전은 $HTTP_SERVER_VARS을 사용함
$_SERVER는 헤더, 경로, 스크립트 위치와 같은 정보를 포함하는 배열이다. 이 배열 안의 엔트리는 웹서버에 의해 생성된다. 모든 웹서버가 이런 것들을 제공한다는 보장은 없다. 서버는 어떤것은 빠뜨리거나 여기에서 목록화된 것 외의 것을 제공할수 도 있다. 이런 많은 수의 변수들은 CGI 1.1 specification에 기반하므로, 그런 변수들은 기대할수 있을것이다.
이 변수는 '슈퍼전역', 또는 자동 전역, 변수이다. 즉 스크립트내의 모든 유효영역안에서 사용가능하다는 의미를 갖는다. $HTTP_SERVER_VARS를 사용할때와 같이 함수나 메소드 안에서 사용하기 위해 global $_SERVER;를 할 필요는 없다.
$HTTP_SERVER_VARS는 동일한 초기 정보를 포함하지만, 자동전역은 아니다. ($HTTP_SERVER_VARS 와 $_SERVER는 다른 변수이고 PHP는 그변수들을 따로 다루게 된다는 것에 주의한다)
register_globals 디렉티브가 설정되어있으면, 이 변수들은 스크립트의 전역 유효영역에서 사용이 가능해 진다. 즉 $_SERVER 와 $HTTP_SERVER_VARS 배열과 분리된다. 관련정보는 전역 등록 사용하기라는 이름의 보안 챕터를 참고한다. 이들 각각의 전역은 자동전역이 아니다.
$_SERVER에서는 다음 구성요소를 확인할수도 있고 그렇지 않은수있다. 이 변수중 일부(심지어 모두)는 PHP가 커맨드 라인에서 수행되고 있을때에는 보여지지 않을것이다.
'PHP_SELF'
현재 실행중인 스크립트의 파일명이고, 도규먼트 루트에 상대적인 경로를 갖는다. 예를 들면, 주소 http://example.com/test.php/foo.bar의 스크립트에서 $_SERVER['PHP_SELF']은 /test.php/foo.bar이 될것이다.
PHP가 커맨드 라인 프로세서로 실행중이면, 이 변수는 나타나지 않는다.
'argv'
스크립트로 전달되는 인자의 배열. 스크립트가 커맨드 라인에서 실행중이면, 이 변수는 C-스타일의 커맨드 라인 인자로 제공된다. GET 메소드에 의해 호출될때에는 이 변수는 질의 문자열(query string)을 포함할것이다.
'argc'
스크립트로 전달되는 커맨드 라인 인자의 갯수 (커맨드 라인에서 실행중일때)
'GATEWAY_INTERFACE'
서버가 사용하는 CGI 사양(specification)의 버전: 예를 들면, 'CGI/1.1'.
'SERVER_NAME'
현재 스크립트가 수행되고 있는 서버 호스트의 이름. 스크립트가 가상 호스트에서 수행중이면, 이 변수는 그 가상 호스트를 위해 정의된 값이 될것이다.
'SERVER_SOFTWARE'
서버 식별 문자열. 요구(ruquest)에 응답할때 헤더안에서 보여준다.
'SERVER_PROTOCOL'
페이지가 요청되어진 정보 프로토콜의 이름과 버전: 예를 들면, 'HTTP/1.0';
'REQUEST_METHOD'
페이지에 접근할때 사용된 요청 메소드 종류. 예를 들면,'GET', 'HEAD', 'POST', 'PUT'.
'QUERY_STRING'
페이지가 접근될때의 질의 문자열
'DOCUMENT_ROOT'
현재 스크립트가 수행중인 다큐먼트 루트 디렉토리. 서버 설정 파일에서 정의된다.
'HTTP_ACCEPT'
현재 요청에 대한 Accept: 헤더의 내용.
'HTTP_ACCEPT_CHARSET'
현재 요청에 대한 Accept-Charset: 헤더의 내용. 예를 들면'iso-8859-1,*,utf-8'.
'HTTP_ACCEPT_ENCODING'
현재 요청에 대한 Accept-Encoding: 헤더의 내용. 예를 들면: 'gzip'.
'HTTP_ACCEPT_LANGUAGE'
현재 요청에 대한 Accept-Language: 헤더의 내용. 예를 들면: 'en'.
'HTTP_CONNECTION'
현재 요청에 대한 Connection: 헤더의 내용. 예를 들면: 'Keep-Alive'.
'HTTP_HOST'
현재 요청에 대한 Host: 헤더의 내용.
'HTTP_REFERER'
현재 페이지에 대한 유저 에이전트를 참조하는 페이지의 주소. 모든 에이전트가 이 값을 갖지 않는다. 일부 에이전트는 HTTP_REFERER를 각 특성에 맞게 변경하는 기능을 제공한다. 간단히 말해서, 이 값은 신뢰할수 없다.
'HTTP_USER_AGENT'
현재 요청에 대한 User-Agent: 헤더 내용. 이 값은 페이지에 접근 중인 유저 에이전트를 표시하는 문자열이다. 표준적인 예로는: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). get_browser()로 이 값을 사용하여 유저 에이전트의 능력에 맞게 페이지의 출력을 조절할수 있다.
'REMOTE_ADDR'
현재 페이지를 보고있는 유저의 IP 주소.
'REMOTE_HOST'
현재 페이지를 보고있는 유저의 호스트명. 역방향 dns 검색이 유저의 REMOTE_ADDR를 위해 사용된다.
참고: 웹서버는 이 변수를 생성할수 있도록 설정되어야 한다. 예를 들면 아파치에서는 httpd.conf안에서 HostnameLookups On 이 필요할것이다. gethostbyaddr()도 참고.
'REMOTE_PORT'
웹서버와 통신중인 유저 머신이 사용중인 포트.
'scRIPT_FILENAME'
현재 수행되는 스크립트의 절대 경로명.
참고: file.php, ../file.php처럼 스크립트를 상대 경로로 지정하여 CLI로 실행할 경우, $_SERVER['scRIPT_FILENAME']은 사용자가 지정한 상대 경로를 포함합니다.
'SERVER_ADMIN'
웹서버 설정 파일안의 SERVER_ADMIN (아파치용) 디렉티브에 주어지는 값. 스크립트가 가상 호스트에서 수행중이면, 이 값은 그 가상호스트를 위해 정의되는 값이 될것이다.
'SERVER_PORT'
웹서버가 통신을 위해 사용중인 서버 머신의 포트. 초기 설정값으로 '80';이 될것이다. 예를 들어, SSL을 사용중이면, 안전한 HTTP 포트로 정의된 어떤 값으로도 변경할수 있다.
'SERVER_SIGNATURE'
활설화되어있다면, 서버가 생성하는 페이지에 추가되는 서버 버전과 가상 호스트명을 갖는 문자열.
'PATH_TRANSLATED'
현재 스크립트에 대한 파일시스템(다큐먼트 루트가 아님) 기반의 경로 서버가 virtual-to-real 매핑으로 설정되면 보인다.
'scRIPT_NAME'
현재 스크립트의 경로를 갖는다. 이 값은 가리킬 필요가 있는 페이지에 유용하다.
'REQUEST_URI'
이 페이지에 접근하기 위해 주어지는 URI; 예를 들면,'/index.html'.
'PHP_AUTH_USER'
HTTP 인증을 사용하는 모듈로서 아파치에서 수행될때, 이 변수는 유저에 의해 제공되는 username으로 설정된다.
'PHP_AUTH_PW'
HTTP 인증을 사용하는 모듈로서 아파치에서 수행될때, 이 변수는 유저가 제공하는 password로 설정된다.
'AUTH_TYPE'
HTTP 인증을 사용하는 모듈로서 아파치에서 수행될때, 이 변수는 인증 타입으로 설정된다.
---------------------------------------------------------------------------------------------------------------------
getenv() 함수 사용
SERVER_NAME : 서버의 호스트 이름 또는 IP 어드레스
GATEWAY_INTERFACE : 서버의 CGI 타입과 계정 레벨을 타나냄
SERVER_PROTOCOL : 서버의 프로토콜
SERVER_PORT : 클라이언트의 요청을 보내는 포트번호
REQUEST_METHOD : CGI에서 데이터를 전송하는 방법으로 GET이나 POST
PATH_INFO : 스크립트에 대한 경로 정보
PATH_TRANSLATED : PATH_INFO 경로를 실제 물리적 경로로 표시한 것
SCRIPT_NAME : 실행 중인 스크립트의 파일 이름
QUERY_STRING : GET이나 POST 방식을 통해 전달한 값을 저장
REMOTE_ADDR : 스크립트 실행을 요청한 클라이언트의 IP 주소
REMOTE_HOST : 스크립트 실행을 요청한 클라이언트의 호스트 이름
CONTENT_LENGTH : POST 방식을 통해 전달되는 입력 정보의 길이
HTTP_USER_AGENT : 스크립트 실행을 요청한 브라우저의 종류 및 버전을 표시
위에 있는 PHP 환경 변수의 값을 얻기 위해서는 getenv() 함수를 사용해야 합니다.
환경 변수의 값을 반환합니다. 실패시 false를 반환합니다.
웹 서버에 설치되어 있는 PHP 정보를 출력하는 함수
phpinfo();
PHP가 설치된 서버의 정보 및 환경 변수 정보 등 서버에 설치된 PHP 관련 정보를 자세히 출력합니다.
//https 접근검사
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
define('DOCUMENT_URL', 'https://'.$_SERVER['SERVER_NAME'].'/');
//define('DOCUMENT_ROOT', '/svc/web/banks/');
}else {
define('DOCUMENT_URL', 'http://'.$_SERVER['SERVER_NAME'].'/');
//define('DOCUMENT_ROOT', '/svc/web/bank1/');
}