이 름

기    능

$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_ADDR; // 현재 접속중인 웹서버의 IP주소를 담고있다.
$_REMOTE_ADDR; // 사용자의 IP주소를 담고있다.
$_DOCUMENT_ROOT; // 웹페이지 문서가 저장되어 있는 루트 디렉토리를 담고있다
$_SERVER["SERVER_SOFTWARE"]; // 웹서버의 이름과 버전을 ('이름/버전')식으로 나타낸다
$_SERVER["HTTP_REFERER"]; // 이동 이전 페이지의 경로를 기억한다
$_SERVER["HTTP_USER_AGENT"]; // POST방식을 이용하여 검색문에 정보가 들어있는 경우에 그 정보의 타입을 나타냅니다.
$_SERVER['HTTP_HOST']; // 사용자가 입력한 주소목록을 출력
$_HTTP_USER_AGENT; // 사용자의 브라우저 이름과 버전을 담고있다.
$_HTTP_REFERER; // 현재 페이지와 이전 페이지를 담고있다.
$_PHP_SELF; // 현재 실행되고있는 PHP파일의 이름과 경로를 담고있다.
$_HTTP_COOKIE_VARS[쿠키이름]; // 해당 '쿠키이름'에 저장되어 있는 값을 담고있다.
$_HTTP_GET_VARS[변수명];  // GET형식으로 받은 해당 '변수명'에 저장되어 있는 값을 담고있다.
$_HTTP_POST_VARS[변수명] ; //POST형식으로 받은 해당 '변수명'에 저장되어 있는 값을 담고있다


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_SOFTWARE  :  웹서버의 이름과 버전

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() 함수를 사용해야 합니다.

string getenv(string varName)

환경 변수의 값을 반환합니다. 실패시 false를 반환합니다.

 

$host = getenv("REMOTE_HOST");

 

 

 

웹 서버에 설치되어 있는 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/');

}