1. PHP 슈퍼전역변수 들의 종류
$GLOBALS 스트립트의 전역 유효영역에서 쓸수있는 모든 변수에 대한 참조를 포함한다. 이 배열의 key는 전역 변수들의 이름이다. PHP 3 이래로 $GLOBALS가 존재해왔다.
$_SERVER 웹서버나, 현재 스크립트의 실행환경에 직접적으로 관련되어 설정되는 변수이다. 구버전의 $HTTP_SERVER_VARS 배열과 동일하다. (이 변수는 현재 유효하지만, 추천하지는 않는다)
$_GET HTTP GET에 의해 스크립트로 제공되는 변수이다. 구버전의 $HTTP_GET_VARS 배열과 동일하다. (이 변수는 현재 유효하지만, 추천하지는 않는다)
$_POST HTTP POST에 의해 스크립트로 제공되는 변수이다. 구버전의 $HTTP_POST_VARS 배열과 동일하다. (이 변수는 현재 유효하지만, 추천하지는 않는다)
$_COOKIE HTTP 쿠키에 의해 스크립트로 제공되는 변수이다. 구버전의 $HTTP_COOKIE_VARS 배열과 동일하다. (이 변수는 현재 유효하지만, 추천하지는 않는다)
$_FILES HTTP post 파일 업로드에 의해 스크립트로 제공되는 변수이다. 구버전의 $HTTP_POST_FILES 배열과 동일하다. (이 변수는 현재 유효하지만, 추천하지는 않는다). 더 자세한 정보는 POST 메소드 업로드를 참고하도록 한다.
$_ENV 환경에 의해 스크립트로 제공되는 변수이다. 구버전의 $HTTP_ENV_VARS 배열과 동일하다. (이 변수는 현재 유효하지만, 추천하지는 않는다)
$_REQUEST GET, POST, COOKIE 입력 메카니즘을 통해 스크립트로 제공되는 변수이다. 이 메카니즘은 신용될수는 없다. 이 배열 안 에 포함된 존재하는 변수와 변수의 나열 순서는 PHP variables_order 설정 디렉티브에 의해 정의된다. 이 배열은 PHP 4.1.0 이전 버전에서 동일한 변수가 존재하지 않는다. import_request_variables()도 참고.
주의 : PHP 4.3.0이후, $_REQUEST 안에 FILE 정보를 갖는 $_FILES 변수가 존재하지 않게 되었다.
$_SESSION 스크립트의 세션에 등록되는 변수이다. 구버전의 $HTTP_SESSION_VARS 배열과 동일하다. (이 변수는 현재 유효하지만, 추천하지는 않는다). 더 자세한 정보는 Session handling functions섹션을 참고.
2. php 변수 사용
2.1. POST, GET, COOKIE, REQUEST 변수
예전에는 $aa, $bb 라는 변수가 다른 페이지로 전송 되면, 그 페이지에서도 $aa $bb 라는 변수로 접근이 가능 하였다. 그러나 여기에는 보안적인 최약점이 있어 register_globals = Off 라는 환경 변수로 설정을 제한하고 있습니다.
지금은 페이지 전송 방식에 따라 GET 방식으로 전송된 경우 $HTTP_GET_VARS['aa'] 또는 $_GET['aa']로 POST 방식으로 전송된 경우 $HTTP_POST_VARS['aa'] 또는 $_POST['aa']로만 접근이 됩니다.
그래서 일부 사용자는 이 부분이 귀찮아 register_globals = On으로 설정하여 사용하기도 합니다. 그러나 다른 개발 언어 보다는 변수 설정이나 활용에서 php가 훨씬 쉽고 간결 합니다.
$_COOKIE 의 경우 register_globals = On 로 설정 되면 cookie와 같은 변수명으로 GET 방식으로 전달하면 변수보다 우선 순위가 GET 방식이 높아서 쿠기변수가 아닌 GET으로 전달된 변수가 적용이되어 보안에 문제가 될 수 있습니다.
variables_order = "GPCS" 라는 php.ini 환경 변수에 의해 조정 됩니다. ( GPCS 는 GET, POST, Cookie, Environment and Built-in variables)
다음은 php.ini 내용의 일부 입니다.
; - register_globals = Off [Security, Performance] ; Global variables are no longer registered for input data (POST, GET, cookies, ; environment and other server variables). Instead of using $foo, you must use ; you can use $_REQUEST["foo"] (includes any variable that arrives through the ; request, namely, POST, GET and cookie variables), or use one of the specific ; $_GET["foo"], $_POST["foo"], $_COOKIE["foo"] or $_FILES["foo"], depending ; on where the input originates. Also, you can look at the ; import_request_variables() function. ; Note that register_globals is going to be depracated (i.e., turned off by ; default) in the next version of PHP, because it often leads to security bugs. ; Read http://php.net/manual/en/security.registerglobals.php for further ; information.
2.2. 사용자 전역 변수
2.2.1 include 파일을 이용한 전역 변수 설정
필자는 전역 변수들을 하나의 파일로 생성하여 저장을 합니다. 그러면 서비스 환경에서 자주 사용되고 공통으로 필요한 변수들이 관리가 편해 집니다.
-->varconf.inc
$DB['dbname'] = "webboard"; $DB['host'] = "123.222.33.11"; $DB['user'] = "user"; $DB['pass'] = "passwd"; $DB['server'] = "oracle";
$IMG_URL = "http://www.couplewith.com:3900"; $IMG_BASE = "/svc/home"; $IMG_MAX_WIDTH = 300; $IMG_MAX_HEIGHT = 300; ?>
--> dbconn.inc
if ($DB['server'] == "mysql"){ $conn = mysql_connect($DB['host'], $DB['user'], $EB['pass'], $DB['dbname'] ); else if ($DB['server'] == "mysql"){ $conn = ora_connect($DB['host'], $DB['user'], $EB['pass'], $DB['dbname'] ); }else{ // ERROR Not Support Database; } ?>
--> board.php
include_once "../inc/varconf.inc"; include_once "../inc/dbconn.inc";
.. .중략 .... echo "
?>
2.2.2 global을 이용한 함수 내부에서 전역변수 사용
: 함수를 이용시 외부 선언된 전역 변수를 사용하기 위해서
global 외부변수명1, 외부변수명2, ..
를 선언하여 외부변수를 사용 할수 있습니다.
-->function_test.php
$Global_var1 = "global";
function aaa( $var1 ){ echo "[$var1]"; echo "[$Global_var1 ]"; //undefined variable $Global_var1 에서 발생 }
function bbb( $var1 ){ global $Global_var1 ; echo "[$var1]"; echo "[$Global_var1 ]";
}
aaa($Global_var1); bbb($Global_var1);
?>
2.3 서버 환경 변수 (서버 글로벌 변수)
- 서버 환경 변수는 웹서비스의 환경 변수 또는 시스템과 연관된 변수여서 서버 글로벌 변수라고도 합니다.
- 이들은 $_SERVER[''HTTP_HOST'] 같은 변수들을 편리하게 접근할수 있습니다.
참고: 4.1.0부터 지원됨. 이전 버전은 $HTTP_SERVER_VARS을 사용함
PHP 메뉴얼의 G. 부록. 예약어 목록 -> 기선언 변수 를 참고 하시면 됩니다.
다음과 같은 파일을 만들면 다른 변수들및 환경을 확인 할수 있습니다.
->> info.php
phpinfo(); ?>
모두 $_SERVER 또는 $_ENV 라는 배열에 포함 되어 읽을 수가 있습니다.
다음은 환경 변수 목록 입니다.
Apache Environment Variable Value
DOCUMENT_ROOT /export/home/MiBox HTTP_ACCEPT image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-shockwave-flash, */* HTTP_ACCEPT_ENCODING gzip, deflate HTTP_ACCEPT_LANGUAGE ko HTTP_CONNECTION Keep-Alive HTTP_COOKIE idsave=off; loginid= HTTP_HOST devel.couplewith.com:9080 HTTP_USER_AGENT Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) PATH /usr/sbin:/usr/bin REMOTE_ADDR 219.250.199.236 REMOTE_PORT 4227 SCRIPT_FILENAME /export/home/MiBox/info.php SERVER_ADDR 203.222.126.128 SERVER_ADMIN mi@couplewith.co.kr SERVER_NAME devel.couplewith.com SERVER_PORT 9080 SERVER_SIGNATURE Apache/1.3.31 Server at devel.netffice.com Port 9080 SERVER_SOFTWARE Apache/1.3.31 (Unix) PHP/4.3.7 GATEWAY_INTERFACE CGI/1.1 SERVER_PROTOCOL HTTP/1.1 REQUEST_METHOD GET QUERY_STRING no value REQUEST_URI /info.php SCRIPT_NAME /info.php |