CI 묻고 답하기

제목 CI 내에서 서버에 따라 segment 호출위치를 변경할 수 있나요?
카테고리 CI 2, 3
글쓴이 lzao 작성시각 2018/11/26 15:16:13
댓글 : 10 추천 : 0 스크랩 : 0 조회수 : 19093   RSS

codeigniter 사용중입니다.

codeigniter 에서 서버에 따라(Live, Dev, Local 등등) segment의 호출 위치를 변경 할 수 있는 기능이 있나요?

예를 들면 segment 값으로 abc 라는 값을 받는데

Live 서버에서는 http://www.test.com/abc/store 라고 하면 abc가 첫번째 파라미터로 값을 받고

Local 에서는 http://www.test.com/local1/abc/stroe 라고 해서 첫번째 세그먼트는 제외하고 두번째 부터 abc라는 값을 받을 수 있도록 말이죠...

codeigniter 에서 이런 설정을 할 수 있는 기능이 있을까요?

 

 다음글 초보자입니다. 제가 이해하고있는 개념이 맞는 것인지..... (2)
 이전글 gd2 사용시 이미지 배경색 변경 (2)

댓글

변종원(웅파) / 2018/11/26 15:30:14 / 추천 0

그런 기능은 없습니다.

constants.php 에서 접속 주소에 따라 세그먼트 숫자를 상수로 분기처리하면 원하는 기능을 구현할 수 있습니다.

저는 로컬에서는 가상도메인 사용으로 로컬이던지 개발, 운영서버의 세그먼트 위치가 변경되지 않도록 합니다.

배강민 / 2018/11/26 15:31:03 / 추천 0

예시로 주신 URL 패턴데로라면 local1이 폴더인거로 보여지는데 

만약 그런거라면 라우트로 잘(?)하면 될수도 있어 보이고, (해보진 않아서 될지는 모르겠네용ㅎ)

이를 원하시는건 아닌 상황이시겠지만, local1 폴더를 local1.test.com로 연결해서 해도 된다면 더 편하지 않을까싶네요.

lzao / 2018/11/26 15:58:13 / 추천 0

@웅파, @배강민

답변 감사합니다.

로컬환경을 잡는 과정에서 운영하고 있는 도메인이 많아 세그먼트로 개발자를 구별하려고 했습니다.

올바른 방법인지는 잘 모르겠으나, 일단 웅파님, 배강민님의 말씀을 참고해서 만들어보겠습니다.

홍구2 / 2018/11/26 23:01:14 / 추천 0

_remap 을 써보시면 원하시는 것을 구현할 수 있지 않을까요? _remap을 쓰면 최상의 세그먼트를 있는 것처럼하거나 없는 것처럼 할 수 있을 것입니다.

http://www.ciboard.co.kr/user_guide/kr/general/controllers.html

 

<?php
// controllers/Abc.php
defined('BASEPATH') or exit('No direct script access allowed');

class Abc extends CI_Controller
{
	public function store()
	{
		echo 'I\'m a store.';
	}
}


<?php
// controllers/Local1.php
defined('BASEPATH') or exit('No direct script access allowed');

include_once(APPPATH . '/controllers/Abc.php');

class Local1 extends Abc
{
	public function __construct()
	{
		parent::__construct();
	}

	public function _remap($method, $params = [])
	{
		$method = array_shift($params);
		if (method_exists($this, $method)) {
			return call_user_func_array(array($this, $method), $params);
		}
	}
}

 

만약 개발자나 운영환경을 구분하기 위한 것이라면 소스내에서 하시기보다는 .env 파일을 이용하시는 것이 더 나을것 같아요.

kaido / 2018/11/27 09:25:30 / 추천 0

가능합니다

다만 왜 바꿔야 하는지는 이해 불가 입니다

프레임워크별로 세그먼트 룰이 있는데, 이 룰을 바꾸게 되면 유지보수가 어려워지게 됩니다.

개발 서버의 분리를 원하시는 거라면 env 기능을 잘 활용 하심을 추천드립니다.

lzao / 2018/11/28 18:37:54 / 추천 0

@홍구2 @kaido

답변 감사합니다.

segment로 구분하는 건 관두기로 했습니다.

여러가지로 유지보수도 힘들고 고쳐야 할 것도 많아서 이 방법은 접어두기로 했습니다.

답변 주신대로 .env 파일을 사용해보려고 하는데 codeigniter 내에 env() 함수가 있나요?

아니면 CI 매뉴얼을 보니 .htaccess 파일에 setEnv를 써서 production과 development를 나눌수 있던데 맞나요?

보통 어떤식으로 .env 파일을 쓰는 지 궁금합니다. ㅠㅠ

kaido / 2018/11/29 09:36:08 / 추천 0

CI4 에서는 아예 env 파일이 있어서 조절이 가능 합니다

CI3 이하에서는 root의 index.php 파일에서 조절 합니다.

정해진건 없긴 한데, 일반적으로 가장 쉬운 판단은 url 정보 기준으로 판별 해서

index.php 파일에서 config 바라 보는 파일을 조절 하거나 합니다.

가령 기본이 이렇다면

/config/database.php

 

폴더를 아예 나눠서 접근

/config/dev/database.php

/config/live/database.php

 

이런 방식이라든가.

몇몇 업체가 이런 방식으로 나누어서 사용하곤 합니다.

 

방법은 많으니 고민해보세요 ㅎㅎ

lzao / 2018/11/29 10:09:03 / 추천 0

@kaido

현재 저희가 CI3 을 사용하고 있어서 두번째 말씀하신 대로 수정해봐야 겠네요.

답변 감사합니다!!

홍구2 / 2018/11/29 19:35:26 / 추천 0

@lzao

저는 이거 사용합니다.

https://github.com/agungjk/phpdotenv-for-codeigniter

kasumil / 2021/11/10 12:06:47 / 추천 0

@홍구2

감사합니다. ci4 쓰면 에러나서 ci3 쓰는데, env를 어떻게 적용해야 하나 했는데 해당 라이브러리 적용하고 적용방법이 궁금해서

하단 링크페이지를 보며 적용하였습니다.

https://github.com/sunuazizrahayu/phpdotenv-for-codeigniter