Computer/PHP

[스크랩] PHP: 기선언변수

알찬돌삐 2005. 5. 27. 14:36
기선언 변수
PHP 4.1.0이후부터 외부 변수를 가져오는 가장 선호되는 방법은 아래에서 설명하는 슈퍼전역을 사용하는것이다. 그 이전버전에서는 register_globals이나 긴형태의 기선언 PHP 배열($HTTP_*_VARS)을 사용한다. PHP 5.0.0부터, 긴 형태의 PHP 예약 변수 배열을 register_long_arrays 지시어로 비활성화할 수 있습니다.

서버 변수: $_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 인증을 사용하는 모듈로서 아파치에서 수행될때, 이 변수는 인증 타입으로 설정된다.


환경 변수: $_ENV
참고: 4.1.0부터 지원됨. 그 이전 버전에서는, $HTTP_ENV_VARS이 사용되었다.

이 변수들은 PHP 해석기가 실행중인 환경에서 PHP의 전역 네임스페이스로 포함된다. PHP가 실행중인 셀과 다른 종류의 셀을 수행하는 시스템에 의해서 많은 변수가 제공된다. 확정적인 변수 목록을 제공하는것은 불가능 하다. 선언된 환경변수 목록에 대한 셀의 문서를 참고하라.

다른 환경 변수는 CGI 변수를 포함한다. PHP가 서버 모듈로 실행중인지 또는 CGI 프로세서로 실행중인지에 따라 달라진다.

이변수는 '슈퍼전역', 도는 자동 전역, 변수이다. 이 말의 의미는 스크립트 내의 모든 영역에서 사용가능하다는 것이다. $HTTP_ENV_VARS를 사용할때와 마찬가지로, 함수나 메소드에서 이 변수에 접근하기 위해 global $_ENV;를 사용할 필요는 없다.

$HTTP_ENV_VARS는 동일한 초기치 정보를 갖는다. 그러나 자동전역이 아니다. (HTTP_ENV_VARS 와 $_ENV는 다른 변수이며 PHP가 따로 다루게 된다는 것에 주의한다)

register_globals 디렉티브가 설정되어있으면, 이변수는 스크립트의 전역 유효영역에서 사용가능해진다. 즉,$_ENV과 $HTTP_ENV_VARS 배열에서 독립적으로 사용된다. 관련 정보는, 전역 등록 사용하기라는 보안 챕터를 참고한다. 이들 각각의 전역변수는 자동전역이 아니다.

HTTP 쿠키: $_COOKIE
참고: 4.1.0부터 지원됨. 이전 버전에서는 $HTTP_COOKIE_VARS를 사용했슴.

HTTP 쿠키를 통해 현재 스크립트로 전달되는 변수의 연관 배열. 어떤 영역에서는 자동으로 전역화된다.

이변수는 '슈퍼전역', 도는 자동 전역, 변수이다. 이 말의 의미는 스크립트 내의 모든 영역에서 사용가능하다는 것이다. $HTTP_COOKIE_VARS를 사용할때와 마찬가지로, 함수나 메소드에서 이 변수에 접근하기 위해 global $_COOKIE;를 사용할 필요는 없다.

$HTTP_COOKIE_VARS는 동일한 초기치 정보를 갖는다. 그러나 자동전역이 아니다. (HTTP_COOKIE_VARS 와 $_COOKIE는 다른 변수이며 PHP가 따로 다루게 된다는 것에 주의한다)

register_globals 디렉티브가 설정되어있으면, 이변수는 스크립트의 전역 유효영역에서 사용가능해진다. 즉,$_COOKIE와 $HTTP_COOKIE_VARS 배열에서 독립적으로 사용된다. 관련 정보는, 전역 등록 사용하기라는 보안 챕터를 참고한다. 이들 각각의 전역변수는 자동전역이 아니다.

HTTP GET 변수: $_GET
참고: 4.1.0부터 지원됨. 이전 버전에서는 $HTTP_GET_VARS를 사용했슴.

HTTP GET 메소드를 통해 현재 스크립트에 전달되는 변수의 연관 배열. 어떤 영역에서는 자동으로 전역화된다.

이변수는 '슈퍼전역', 도는 자동 전역, 변수이다. 이 말의 의미는 스크립트 내의 모든 영역에서 사용가능하다는 것이다. $HTTP_GET_VARS를 사용할때와 마찬가지로, 함수나 메소드에서 이 변수에 접근하기 위해 global $_GET;를 사용할 필요는 없다.

$HTTP_GET_VARS는 동일한 초기치 정보를 갖는다. 그러나 자동전역이 아니다. (HTTP_GET_VARS 와 $_GET는 다른 변수이며 PHP가 따로 다루게 된다는 것에 주의한다)

register_globals 디렉티브가 설정되어있으면, 이변수는 스크립트의 전역 유효영역에서 사용가능해진다. 즉,$_GET와 $HTTP_GET_VARS 배열에서 독립적으로 사용된다. 관련 정보는, 전역 등록 사용하기라는 보안 챕터를 참고한다. 이들 각각의 전역변수는 자동전역이 아니다.

HTTP POST 변수: $_POST
참고: 4.1.0부터 지원됨. 이전 버전에서는 $HTTP_POST_VARS를 사용했슴.

HTTP POST 메소드를 통해 현재 스크립트에 전달되는 변수의 연관 배열. 어떤 영역에서는 자동으로 전역화된다.

이변수는 '슈퍼전역', 도는 자동 전역, 변수이다. 이 말의 의미는 스크립트 내의 모든 영역에서 사용가능하다는 것이다. $HTTP_POST_VARS를 사용할때와 마찬가지로, 함수나 메소드에서 이 변수에 접근하기 위해 global $_POST;를 사용할 필요는 없다.

$HTTP_POST_VARS는 동일한 초기치 정보를 갖는다. 그러나 자동전역이 아니다. (HTTP_POST_VARS 와 $_POST는 다른 변수이며 PHP가 따로 다루게 된다는 것에 주의한다)

register_globals 디렉티브가 설정되어있으면, 이변수는 스크립트의 전역 유효영역에서 사용가능해진다. 즉,$_POST와 $HTTP_POST_VARS 배열에서 독립적으로 사용된다. 관련 정보는, 전역 등록 사용하기라는 보안 챕터를 참고한다. 이들 각각의 전역변수는 자동전역이 아니다.

HTTP File 업로드 변수: $_FILES
참고: 4.1.0부터 지원됨. 이전 버전에서는 $HTTP_POST_FILES를 사용했슴.

HTTP POST 메소드를 통해 현재 스크립트에 업로드되는 아이템의 연관 배열. 어떤 영역에서는 자동으로 전역화된다.

이변수는 '슈퍼전역', 도는 자동 전역, 변수이다. 이 말의 의미는 스크립트 내의 모든 영역에서 사용가능하다는 것이다. $HTTP_POST_FILES를 사용할때와 마찬가지로, 함수나 메소드에서 이 변수에 접근하기 위해 global $_FILES;를 사용할 필요는 없다.

$HTTP_POST_FILES는 같은 정보를 갖고 있지만, 자동 전역 변수가 아니다.

register_globals 디렉티브가 설정되어있으면, 이변수는 스크립트의 전역 유효영역에서 사용가능해진다. 즉,$_FILES와 $HTTP_POST_FILES 배열에서 독립적으로 사용된다. 관련 정보는, 전역 등록 사용하기라는 보안 챕터를 참고한다. 이들 각각의 전역변수는 자동전역이 아니다.

Request 변수: $_REQUEST
참고: 4.1.0부터 지원됨. 이전 버전에서는 관련된 배열이 없다.

참고: PHP 4.3.0 이전에는 $_REQUEST 안에도 $_FILES 정보가 포함되어 있었다.

$_GET, $_POST, $_COOKIE의 내용물로 구성된 연관 배열.

이변수는 '슈퍼전역', 도는 자동 전역, 변수이다. 이 말의 의미는 스크립트 내의 모든 영역에서 사용가능하다는 것이다. 함수나 메소드에서 이 변수에 접근하기 위해 global $_REQUEST;를 사용할 필요는 없다.

register_globals 디렉티브가 설정되어있으면, 이변수는 스크립트의 전역 유효영역에서 사용가능해진다. 즉,$_REQUEST 배열에서 독립적으로 사용된다. 관련 정보는, 전역 등록 사용하기라는 보안 챕터를 참고한다. 이들 각각의 전역변수는 자동전역이 아니다.

세션 변수: $_SESSION
참고: 4.1.0부터 지원됨. 이전 버전에서는 $HTTP_SESSION_VARS를 사용했슴.

현재 스크립트에서 사용가능한 세션 변수를 포함하는 연관배열. 이 변수를 사용하는 방법에 대한 자세한 정보는 Session functions 문서를 참고.

이변수는 '슈퍼전역', 도는 자동 전역, 변수이다. 이 말의 의미는 스크립트 내의 모든 영역에서 사용가능하다는 것이다. $HTTP_SESSION_VARS를 사용할때와 마찬가지로, 함수나 메소드에서 이 변수에 접근하기 위해 global $_SESSION;를 사용할 필요는 없다.

$HTTP_SESSION_VARS는 같은 정보를 갖고 있지만, 자동 전역 변수가 아니다.

register_globals 디렉티브가 설정되어있으면, 이변수는 스크립트의 전역 유효영역에서 사용가능해진다. 즉,$_SESSION와 $HTTP_SESSION_FILES 배열에서 독립적으로 사용된다. 관련 정보는, 전역 등록 사용하기라는 보안 챕터를 참고한다. 이들 각각의 전역변수는 자동전역이 아니다.

Global 변수: $GLOBALS
참고: $GLOBALS PHP 3.0.0부터 지원되었다.

현재 스크립트의 전역 유효영역내에서 선언되어있는 모든변수에 대한 참조를 포함하는 연관배열이다. 변수명은 배열의 키로 사용된다.

이변수는 '슈퍼전역', 도는 자동 전역, 변수이다. 이 말의 의미는 스크립트 내의 모든 영역에서 사용가능하다는 것이다. 함수나 메소드에서 이 변수에 접근하기 위해 global $GLOBALS;를 사용할 필요는 없다.

이전 에러 메시지: $php_errormsg
$php_errormsg는 PHP에 의해 생성되는 가장 최근의 에러 메시지 텍스트를 포함하는 변수이다. 이변수는 에러가 발생한 영역내에서만 유효하다. 그리고, track_errors 설정 옵션이 on되어있어야 한다(초기값은 off이다)

출처 : PHP.NET.