CI 묻고 답하기

제목 CI 동작원리에 대해서...
글쓴이 kimswave 작성시각 2010/05/01 18:21:42
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 29995   RSS
CI 동작원리에 대해 궁금점이 생겨서 문의드립니다.

example.com/index.php/콘트롤러/함수/변수...

이런식인데

여기서 index.php/콘트롤러

이런식으로 불러오면 index.php를 읽는게 아니라 index.php/콘트롤러로 접근되는게 아닌가요?

그러면 index.php->CodeIgniter/codeigniter.php인가를 읽지 않는거 아닌가요?

그러면 기본 라이브러리들이랑 그런것들이 초기화가 되어 있지 않는거 아닌가요?



아니면.... 

example.com/index.php/콘트롤러 <- 이렇게 읽어도

index.php를 읽고 지나가나요?

Controller를 상속 받는데

parent::Controller이렇게 생성자 호출하던데 여기서 셋팅이 다되는건가요?

소스를 봤는데

Controller에서는 CI_Base의 생성자를 호출하던데 이게 index.php->CodeIgniter/codeigniter.php를 모두 불러오는건가요?

찾아봣는데 CI_Base는 못찾겠어요.

view 같은데서도 기본 셋팅된 라이브러리들 다 불러와서 쓰는걸 보면 초기화가 다되는거 같은데 어떤 원리인지 못찾겠네요.

그리고 무조건 컨트롤러를 통해서 들어가야 기본 라이브러리 초기화가 다 되어서 사용되는거죠?

각 뷰 페이지에는 각 페이지에 개별접근 불가 코드는 들어가 있지 않던데, 각 뷰에는 그냥 접근은 가능한건가요?

index.php/콘트롤러/ <- 요방식이 아니면 접근이 불가능하게 막아놓은 코드같은게 있나요?





아..... 또 질문이 있어요.

혹시나 페이게이트같은곳 결제시스템에서 회원들이 결제하고 -> 포인트 -> 다시 출금 하는 부분에서 결제->포인트는 된다고

하는데 포인트->다시출금 하는 부분이 가능한지 여쭤보고 싶네요. 이것도 페이게이트 사에서 제통장이나 계좌등에서 회원들에게 출금을 해주면 되지 않을까요?

페이팔 사용하면 좋은데.... 이거 기본원화거래가 안되서 환율손해가 많이 날거 같고, 페이팔 사용만 하게 하면 회원들이 접근도 힘들어 할 거 같아서요....


그럼 ^^ kindly regards~~plz.

답변 달아주셔 미리 감사합니다.. 


 다음글 한글 파일 명 업로드에러 (2)
 이전글 [초보]syntaxhighlight (2)

댓글

kirrie / 2010/05/01 20:19:20 / 추천 0
첫번째 질문에 대한 답변.

rewrite를 이용하지 않고 기본적인 index.php를 이용하여 서비스를 한다고 가정하겠습니다. 다음과 같이 웹서버에 요청을 보낸다고 할 때 아파치는 가장 먼저 어떤 파일을 서빙할까요?

http://www.foobar.com/index.php

아파치는 먼저 www.foobar.com 도메인의 설정 가운데서 DocumentRoot에 해당하는 디렉토리로 이동하여 index.php 파일 (혹은 index.php 디렉토리) 가 있는지 검사합니다. 만약에 index.php라는 디렉토리가 있다면 다시 해당 디렉토리로 이동해서 default index 파일로 설정된 파일 (흔히 index.html index.php 등으로 설정된) 이 있는지 검사합니다. 해서 해당 파일이 존재하면 해당 파일을 서빙하고 존재하지 않는다면 404에러를 발생시킵니다.

그렇기 때문에 아무리 CI 라우팅을 설정하거나 해도 http://www.foobar.com/index.php/some_controller/some_method 라는 요청을 보내면 아파치는 먼저 DocumentRoot에 index.php가 있는지 확인하여 (있죠 당연히) 이 index.php파일을 서빙합니다. 때문에 CI는 정상적으로 query string을 해석하여 콘트롤러의 메소드를 실행할 수가 있는 것입니다.

CI는 모든 요청을 index.php가 처리합니다. 경우에 따라서 index.php를 없애고 시멘틱하게 url를 구성하기 위해서 rewrite모듈을 사용하기도 합니다.

두번째 질문은 CI 자체의 질문이라기 보다는 프로그래밍 비지니스 로직에 관련된 질문이므로 답변하기 어려울 것 같습니다.
변종원(웅파) / 2010/05/01 22:18:38 / 추천 0
매뉴얼에 도식화 되어 있는게 있습니다.
참고바랍니다.

http://codeigniter-kr.org/user_guide/overview/appflow.html


kimswave / 2010/05/02 00:20:43 / 추천 0
 아. 감사합니다.

index.php/some_controller에서 controller가 어떤 경로는 아니네요. index.php가 모든걸 다 하는거였네요.

그런데 example.com/app/views/home.php

이렇게 하면 
Fatal error: Using $this when not in object context in /home/kimswave/public_html/app/views/home.php on line 1

이렇게 나오는데

오류는 나지만서도 일단 접근은 가능한거 같은데 이럴 경우는

보안상 문제는 없는건가요?



케이든 / 2010/05/02 02:40:46 / 추천 0
뷰파일이므로

크게 문제 될거같진 않습니다

사용자 입장에서 저 주소를 알수있는 방법도 없을거같구요 ^^

저걸 방지하시려면 rewrite쓰시면 됩니다
봉남이 / 2010/05/05 16:54:25 / 추천 0

example.com/app/views/home.php

소스 첫째줄에
if( ! defined('BASEPATH')) exit;
을 넣으시면 개별실행되지 않습니다