CI 묻고 답하기

제목 이게 무슨 차이가 있는걸까요?
글쓴이 수야디벨 작성시각 2012/10/29 10:34:06
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 14800   RSS

우분투에서 작업을 하거든요~

그런데 twitter oAuth 를 옮겨서 작업하는데,


우분투의 기본경로는 /var/www 입니다.

그래서 그냥 /var/www 에 twitter 폴더를 복사하면 ( 이 twiiter 폴더 하위에는 connect / redirect / config 등등 다양한 php존재)

이런식으로 하면 정상호출 되거든요?

http://서버 ip/twitter/connect.php


그런데 전 ci를 사용할 것이므로,

이 twitter 폴더를

/var/www/test/appication/views/test/  아래에 twitter라는 폴더 통째로 복사했습니다.
그러면 views 아래에 twitter라는 하위 폴더가 생긴것인데요

이를 호출하기 위해서 컨트롤 단에서

$this->load->view('twitter/connect');

라고 호출하니까 되더라구요?


그런데, 정작 connect에서 연결된 이미지라든지,
링크라던지가 먹통입니다.
(예를 들어 connect.php 에   버튼에 연결된 링크 주소가$content = '<a href="./redirect.php"><img src="./images/lighter.png" alt="Sign in with Twitter"/></a>';라고 경로가 잡혀있거든요
  그러면 어차피 ./ 가 현재폴더를 말하는것이므로, 그렇게 큰 차이는 없어보이거든요 .. 같은 폴더에 분명 위 경로의 이미지나 php가 존재하니까요.)


왜그런걸까요?
 다음글 이미지 불러오기 질문입니다. (2)
 이전글 로그인정보를 유지하려면.. (3)

댓글

신의실수 / 2012/10/29 11:12:43 / 추천 0

흠... 저도 초보라 완벽한 대답은 못드리겠지만 제가 겪은 일을 더듬어서 답변해볼게요.


var/www/twitter/connect.php를 호출할때는 basepath가 connect.php로 지정되는것이 옳습니다. 때문에 src="./images/lighter.png"하면 먹혀들어가죠.

근데 ci에선 basepath가 var/www/test/application/.../connect.php가 아니라,
var/www/test/index.php로 들어가고, connect.php는 그냥 자기 콘텐츠만을 제공하는걸로 알고있습니다. 즉 모든 view파일은 파일 내용만을 던져줄뿐이고 그 basepath는 ci뿌리등록부의 index.php로 되는것입니다. 그렇게 볼때 위에서처럼 image를 호출하면, twitter등록부에서가 아니라 /var/www/test에서 찾으려 하죠. 당연히 연결이 안됩니다. 해결방도는 자원파일을 ci루트에 연결시키는 등 다양한 방법이 있는걸로 압니다.
 

[요약]
1. view로 호출되는 파일은 그 자체가 basepath로 되지 못한다. 진짜는 ci루트의 index.php이다.
2. 따라서 image나 기타 자원 호출은 해당 view파일을 기점으로 연결시킬것이 아니라, ci루트를 기점으로 연결시킨다.
3. 만약 자원연결을 수정하기 어려운 경우는 해당 view파일을 base로 설정해주고 넘어간다(이런 방법이 있긴 있나요 어디서 본것 같긴 한데... ㅠㅠ)

[핵심]
"그러면 어차피 ./가 현재폴더를 말하는것이므로" 이놈을 믿지 마세요.

이상이 비슷한 고충을 겪었던 또 한명의 초보의 의견입니다. 부분적으로 틀릴수도 있고 통채로 틀릴수도 있어요. 완벽한 답변은 아래 고수분들이!

변종원(웅파) / 2012/10/29 16:44:33 / 추천 0
 ci는 index.php가 있는 디렉토리가 기준입니다.

디렉토리 구조가  아래와 같다면

application
system
image
js
index.php

뷰파일에서 이미지는 /image/a.jpg 로 호출하면 되고
자바스크립트는 /js/a.js 로 선언하여 쓰시면 됩니다.