CI 묻고 답하기

제목 global (전역변수) 사용 하려면 어떻게 해야 할까요?
글쓴이 지기냥 작성시각 2015/07/28 14:07:33
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 24191   RSS
PG 사 모듈을 받아 개발중에 있습니다.

PG사에서 모듈 대부분이 function 단위로 해당 함수 안에는 모두 전역변수 (global) 선언을 하여 변수를 공유하게
되어 있습니다.
한두개가 아니라서 일일이 클래스화 시키고 연결 함수들을 바꾸기가 너무 힘이 들어서 global 변수를 허용 하고 싶습니다.
찾찾아보니 register_globals = 'on' 선언을 해주면 될 듯 한데

CodeIgniter.php 파일에

if ((bool) ini_get('register_globals')) {
  $_protected = array(
   '_SERVER',
   '_GET',
   '_POST',
   '_FILES',
   '_REQUEST',
   '_SESSION',
   '_ENV',
   '_COOKIE',
   'GLOBALS',
   'HTTP_RAW_POST_DATA',
   'system_path',
   'application_folder',
   'view_folder',
   '_protected',
   '_registered',
  );

  $_registered = ini_get('variables_order');
  foreach (array('E' => '_ENV', 'G' => '_GET', 'P' => '_POST', 'C' => '_COOKIE', 'S' => '_SERVER') as $key => $superglobal) {
   if (strpos($_registered, $key) === FALSE) {
    continue;
   }

   foreach (array_keys($$superglobal) as $var) {
    if (isset($GLOBALS[$var]) && !in_array($var, $_protected, TRUE)) {
     $GLOBALS[$var] = NULL;
    }
   }
  }
 }
위위와 같이 되어 있습니다. 위 파일을 고쳐야 하는건지 , 아니면 다른 곳에서 설정을 해줘야 하는건지
또 어떻게 설정해야 하는건지 궁금합니다.

그리고 global 변수를 허용 했을때 예상되는 문제점이나 보안상 이슈가 어떻게 발생하는지도 궁금합니다.



 
태그 global,전역
 다음글 템플릿파서 관련 질문드립니다. (6)
 이전글 중복되는 name 값의 데이터를 각각 따로 데이터베이스... (2)

댓글

변종원(웅파) / 2015/07/28 19:16:38 / 추천 0
http://cikorea.net/user_guide_2.1.0/libraries/loader.html 에서 $this->load->vars($array) 참고해서 
조금 수정하시면 됩니다.
지기냥 / 2015/07/29 18:17:52 / 추천 0
음.. $this->load->vars()  로 컨트롤러에서 선언해 줘도 ,   view 페이지에 변수 넘기는 정도인듯 합니다.

예를 들어 view 페이지 안에 function 을 따로 만들었을때  function 안에서 global 선언을 해도 , 위와 같은 방법으론 전역 변수를 불러 올 수 없습니다. (테스트를 해봤는데 안되네요. )
단순이 function 안에서 global 을 쓸 수 있게만 되면 해결될 듯 한데 , 방법이 없을까요?

 
변종원(웅파) / 2015/07/29 23:58:07 / 추천 0
지기냥/ 뷰에서 function을 왜 만들죠? ^^
mvc패턴에선 뷰는 뷰일뿐입니다. 비지니스 로직과 그 결과를 가공하는 곳이 아닙니다.
그리고 $this 객체가 영향을 미칠 수 있는 곳은 한정적(mvc)입니다. 

차라리 세션이나 쿠키를 사용하시는게 나을 것 같네요.
변종원(웅파) / 2015/07/30 00:01:04 / 추천 0
참고로 vars()는 전역변수처럼 선언하는 것이고 사용은 get_var()입니다.