iWiz ShareBase

IT Specialist 윤태현의 iWiz ShareBase는 IT뿐 아니라 각종 잡다한 지식들을 함께 나누는 지식공유 커뮤니티입니다.

iWiz,ShareBase,윤태현,Java,JSP,EJB,IT,정보기술,웹프로그래밍,PHP,ASP,DBMS,MySQL,서버,네트워크,server,network,WAS,웹애플리케이션,블로그,blog,웹서버,DB,오라클,oracle,mysql,JRun,웹로직,톰캣,tomcat,아파치,자동차,EF쏘나타,로또 6/45

갤러리 Pixelgrapher.com | 로또 6/45 번호생성 및 통계 데이터 | 전체기사보기 | 전체글 #1 | 전체글 #2 | 전체글 #3 | 전체글 #4 | 전체글 #5 | 전체글 #6 | 전체글 #7 | 전체글 #8 | 전체글 #9 | 전체글 #10 |
HOME iWiz
ShareBase
Remember 0523 & 0818
지식은 나눌수록 커집니다 - iWiz's ShareBase
웹프로그래밍(기타) PHP, ASP, Perl, CGI 등 각종 웹프로그래밍에 관한 자료들입니다.


  iWiz(2004-01-04 22:51:16, Hit : 15487, Vote : 24
 http://www.wz.pe.kr

PHP의 register_globals 옵션과 track_vars 옵션의 사용


PHP에서 개발 작업을 할때 GET이나 POST로 넘어온 데이터들이 자동으로
폼필드 이름으로 만들어진 변수가 생성되어 값이 할당되는 것을 볼 수 있습니다.
즉 입력폼에서 email 이라는 입력필드가 있었다면 사용자가 입력한 값은
PHP에서 $email 변수에 자동으로 담겨지는 것입니다.

그러나 PHP의 최신 버전을 설치하면 이것이 이뤄지지 않는 것을 볼 수 있습니다.
위에서 예로든 $email 변수를 뒤져봤자 아무값도 없기 때문에 당황할 수 밖에 없고,
예전에 개발한 PHP 프로그램을 최신 버젼의 PHP 엔진에서 동작시키면 당연히
문제가 발생하고 동작이 되지 않을 것입니다.

그 이유는 PHP 최신버전에서는 예전버전과는 달리 php.ini의 "register_globals" 옵션의
값이 기본으로 off로 설정되어 있기 때문입니다.
이 옵션의 역할은 바로 EGPCS(Environment, GET, POST, Cookie, Server)의 값들을
자동으로 PHP의 전역변수로 만들어주는 역할을 하고 있습니다.
따라서 PHP 최신버전에서도 register_globals 옵션을 on으로 설정해두면 이전 버전과
똑같이 동작할 것입니다.

참고로 PHP 개발자는 이 옵션을 꺼두길 권장하고 있으며, 그래서 PHP 최신버전부터는
디폴트로 off가 되어 배포되는 것입니다.  일단 상식적으로 생각해볼때도 PHP 페이지가
수행될때마다 환경변수값, GET, POST, 쿠키, HTTP서버변수값 등을 모두 읽어들여
자동으로 변수로 할당시킨다는 것은 퍼포먼스 측면이나 메모리 관리 측면에서도 그다지
바람직하지는 않고, 또한 변수이름이 중복되는 경우가 발생할 경우도 있어 문제의 소지를
안고 있습니다.  또한 보안상의 문제 역시 안고있다고 합니다.  따라서 PHP로 프로그램을
개발시에는 이 기능을 사용치 않도록(즉, PHP에 의해 자동으로 할당된 전역 변수를 사용치 않도록)
권장하고 있습니다.

그렇다면 프로그램 개발시 어떻게 Form이나 Parameter를 통해 전송된 데이터를 다룰 수 있을까요?
이것은 바로 track_vars 옵션에 의해 결정되는데, track_vars는 PHP 4.0.3 이상부터는
항상 on으로 되어 있습니다.  이 옵션이 켜져 있을 경우 EGPCS(Environment, GET, POST, Cookie, Server)
값들은 다음과 같은 전역 연관(associative) 배열에 저장이 됩니다.

환경변수 : $HTTP_ENV_VARS
GET : $HTTP_GET_VARS
POST : $HTTP_POST_VARS
쿠키 : $HTTP_COOKIE_VARS
서버 : $HTTP_SERVER_VARS

예를들어 Form에서 넘어온 email 입력필드의 값을 참조하려면 $HTTP_POST_VARS["email"]을
사용하면 됩니다.  만약 GET으로 넘어왔다면 $HTTP_GET_VARS["email"]을 사용해야 합니다.
예전방식 보다는 다소 번거로운 것 같지만 보다 직관적인 프로그래밍이 가능하여 향후 디버깅이나
프로그램 수정시에는 매우 효과적일 것입니다.  (적어도 어디에서 갑자기 생겨난 변수인지를 몰라서
헤매는 일은 없겠죠 ^^)  게다가 PHP 개발자가 권하는 방식이니 손해볼 건 없을 듯 합니다.

[결론]
1. PHP 최신버전을 설치시에는 기존 프로그램과의 호환성을 고려해 register_globals 옵션을 on으로 설정한다.
2. 향후 PHP로 개발되는 프로그램에서는 PHP에서 자동으로 할당한 변수를 사용치 않고 번거롭더라도 반드시
track_vars 옵션에 의해 생성된 연관배열을 사용한다.
3. 프로그래머에게 필요한 진정한 게으름은 당장은 바쁘더라도 앞으로 두고두고 게으름을 피울 수 있도록 프로그램을 만드는 것이라는 정신을 잊지 않는다.

[팁]
아무것도 아닌 코드지만... 디버깅 등의 목적으로 POST로 넘어온 모든 데이터값을 보고 싶을때는...
foreach ($HTTP_POST_VARS as $key=>$val) {
  echo "$key : $val<br>n";
}
하면 모든 내용을 볼 수 있습니다.  $HTTP_GET_VARS나 $HTTP_ENV_VARS 등의 다른 연관배열에도
동일하게 사용할 수 있습니다.




62   mod_throttle 모듈을 이용한 사용자 트래픽 제어  iWiz 2006/06/22 8910 0
61   Tomcat-Apache using JK2 connector  iWiz 2004/03/21 6496 41
60   RedHat 9.0에서의 JRun JSP 컴파일러의 문제점  iWiz 2004/01/04 5382 50
59   RedHat 9.0에서의 JRun-Apache 커넥터의 문제점  iWiz 2004/01/04 5064 48
58   JRun 4.0의 튜닝 관련 옵션  iWiz 2004/01/04 5810 68
57   JRun 4.0의 Activity 모니터링 방법  iWiz 2004/01/04 4786 57
56   JRun4.0: DataSource 커넥션풀 관련 옵션 [4]  iWiz 2004/01/04 6532 46
55   JRun에서 JSP 컴파일시 java 파일 생성하기  iWiz 2004/01/04 7916 63
54   JRun의 실제 서비스 운영시 고려사항  iWiz 2004/01/04 6192 44
53   수정된 인터넷 익스플로러에서 상호작용 ActiveX 컨트롤 활성화 가이드  iWiz 2006/03/03 8226 4
52   HTML 특수기호 엔터티(Entity) 테이블 [2]  iWiz 2006/03/03 13887 2
51   웹사이트의 새로운 혁명 Ajax [13]  iWiz 2005/11/22 5724 6
50   MSN 메신저 친구 자동등록 스크립트  iWiz 2004/10/12 6067 35
49   JavaScript MD5 해쉬 생성 함수  iWiz 2004/01/07 8881 35
48   JavaScript로 만든 진법변환 및 보수계산기 [4]  iWiz 2004/01/04 157917 51

1 [2][3][4][5]
 

Copyright 1999-2023 Zeroboard / skin by zero
iWiz ShareBase, ⓒCopyleft by iWiz.  For more information contact .
본 웹사이트에 게시된 이메일 주소가 전자우편 수집 프로그램이나 그 밖의 기술적 장치를 이용하여 무단으로 수집되는 것을 거부하며, 이를 위반시에는 정보통신망법에 의해 형사처벌됨을 유념하시기 바랍니다. [게시일 2004. 1. 31]