자동전역변수는 환경 변수가 포함되어, 모든 환경 변수 목록을 phpinfo()로 확인할 수 있습니다.

예제 (ex #1
 <?php
      phpinfo
(INFO_VARIABLES
);
 
?>

이렇게 선언된 변수는 다음과 같은 방법으로 가져올 수 있습니다.

 $HTTP_SERVER_VARS['환경변수'];
 $_SERVER['환경변수'];
 $GLOBALS['_SERVER']['환경변수'];
 getenv(['환경변수']);

PHP는 실행되는 스크립트에 적용이 되는 상당량의 미리 선언된 변수를 제공합니다. 하지만, 이 변수의 대부분은 운영되는 서버, 서버의 버전, 서버의 설정, 다른 팩터와 관련되어 있어서 보안에 문제시 될 수 있습니다.

그런 이유로 PHP 4.2.0 이후 버전부터, php.ini인 register_globals 의 기본값이 off 로 셋팅됩니다. register_globals 를 off 로 놓으면, 전역 유효영역 안의 미리 선언된 변수 집합들에 영향을 미치는데, 예를 들면, DOCUMENT_ROOT값을 얻기 위해서는 $DOCUMENT_ROOT 대신에 $_SERVER['DOCUMENT_ROOT']를, /test.php?id=3 에서 $id 대신에 $_GET['id']를, $HOME 대신에 $_ENV['HOME']을 사용해야 합니다.
 
서버를 아파치로 모듈로 사용한다면, 다음 아파치 함수로 환경 변수를 가져올 수 있습니다.

예제 (ex #2

 <?php
 
// 아파치 모듈로 모든 HTTP 요청 헤더를 가져옵니다.
 
if (!function_exists('apache_request_headers'
)) { 
        function 
apache_request_headers
() { 
            foreach(
$_SERVER as $key=>$value
) { 
                if (
substr($key,0,5)=="HTTP_"
) {
                    
$key=str_replace(" ","-",ucwords(strtolower(str_replace("_"," ",substr($key,5
))))); 
                    
$out[$key]=$value

                }else{ 
                    
$out[$key]=$value

                } 
            } 
            return 
$out

        }
 } 
 
print_r(apache_request_headers
());
 
/*
 결과:
 Array
 (
    [Accept] => */
*
    [
Accept-Language] => 
ko
    
[Accept-Encoding] => gzip
deflate
    
[User-Agent] => Mozilla/4.0 (compatibleMSIE 6.0Windows NT 5.1SV1
)
    [
Host] => 
127.0.0.1
    
[Connection] => Keep-
Alive
 
)
 */





 

 
 
// 개별 환경변수를 가져옵니다.
 
$ret apache_getenv("SERVER_ADDR"
);
 echo 
$ret
// 결과: 127.0.0.1
 
?>


다음은 전송된 헤더 목록을 가져오는 함수입니다.

예제 (ex #3
 <?php
 
// 아파치 모듈로 모든 HTTP 요청 헤더를 가져옵니다.
 // 넷스케이프/iPlanet/SunONE NSAPI 서버 모듈에서도 사용할 수 있습니다.
 // getallheaders()도 같은 역할을 합니다.
 
if (!function_exists('apache_response_headers'
)) {
    function 
apache_response_headers 
() {
        
$arh 
= array();
        
$headers headers_list
();
        foreach (
$headers as $header
) {
            
$header explode(":"$header
);
            
$arh[array_shift($header)] = trim(implode(":"$header
));
        }
        return 
$arh
;
    }
 }
 foreach (
apache_response_headers() as $name => $value
) {
    echo 
"$name: $value<br />\n"
;
 }
 
/*
 결과:
 Accept-Ranges: bytes
 X-Powered-By: PHP/4.3.8
 */
 
?> 

아파치 함수로 강제적으로 ip를 바꾸어 테스트해 보았는데, $_SERVER 에 영향을 주지 않음을 알 수 있습니다.

예제 (ex #4

 <?php 
 
echo apache_getenv('SERVER_ADDR'); 
// 결과: 127.0.0.1


 // ip 환경변수를 강제적으로 바꿉니다.
 
apache_setenv("SERVER_ADDR""192.168.0.2"
);


 echo 
apache_getenv('SERVER_ADDR'); 
// 결과: 192.168.0.2


 // 아파치 함수로 환경변수를 정의하여도
 // 미리 정의된 변수에는 영향을 받지 않습니다.
 
echo $_SERVER['SERVER_ADDR']; 
// 결과: 127.0.0.1
 
?>  


관련글: 2011/04/16 - [phP 들어가기/phP입문/변수 기초] - 전역 변수 $GLOBALS
           2011/05/31 - [phP 들어가기/phP입문/변수 기초] - 외부변수의 이해
           2011/04/09 - [phP 들어가기/phP입문/변수 기초] - CGI 환경 변수

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요