기본설정


지니PHP는 프레임워크의 기본적인 동작을 지정하는 환경 설정파일이 하나 존재합니다. 이 설정파일은 글로벌 설정으로 프레임워크의 전반적인 동작 및 소스경로를 지정합니다.

.env.php


.evn.php는 php언어로 작성된 설정 파일 입니다.

파일명 앞에는 .가 붙습니다. 이는 리눅스와 같은 파일 시스템에서 숨김파일을 의미합니다.

환경설정


지니PHP는 프레인워크의 환경설정 .env.php이외에 운영되는 서비스의 환경설정을 별도로 구성을 할 수 있습니다.

환경설정은 코드를 다양한 환경과 서비스를 구축하는데 동적으로 동작을 할 수 있도록 도와주는 설정값들의 모임입니다.

설정파일


환경설정 값들은 파일로 저장되어 관리가 됩니다.

환경설정 파일이란?

JSON, Yaml, ini 등의 데이터 시리얼 처리된 문자열을 담고 있는 파일들 입니다. 즉, 직렬화된 문자열을 저장하고 있는 파일을 말합니다. 지니PHP는 다수의 환경 설정파일을 관리할 수 있습니다.

확장자

각각의 데이터 파일들은 일반적으로 사용되는 확장자를 같이 사용합니다.

json 포맷 파일의 경우 확장자를 .json을 사용합니다. Yaml 포맷 파일의 경우 확장자를 .yml을 사용합니다. 윈도우 운영체제에서 많이 사용하는 ini 포맷 파일은 .ini를 사용합니다.

그외 PHP 파일안에 배열값을 사용하여 설정값으로도 사용할 수 있습니다. PHP로 포맷 파일을 작성할때에도 .php확장자를 사용합니다.

설정파일 작성


위에서 설명한 설정파일들은 배열형태로 작성되어 관리가 됩니다. 배열은 키와 값을 하나로 가지고 있는 연상배열 형태로 관리되어 집니다. 이렇게 키값을 가지는 배열은 보다 데이터를 접근하기가 편리합니다.

각각의 포맷양식은 고유의 작성 규칙이 존재합니다. 규칙은 관련 문서를 참고해 주시길 바랍니다.

json

자바스크립트에서 많이 사용하는 데이터 포맷입니다. json 파일은 자바스크립트 외의 다양한 응용프로그램에서도 사용되는 인기 데이터 포맷입니다. PHP는 json 데이터를 처리할 수 있는 별도의 내장함수들을 제공을 합니다.

json 포맷의 설명은 관련 정보를 참고 하시길 바랍니다.

yaml

YAML은 다양한 형태로 데이터를 구현할 수 있습니다. 단일 값 또는 배열안에 또다른 배열을 담을 수도 있습니다. YAML을 잘 사용하기 위해서는 관련 포맷 작성볍을 추가로 학습을 하셔야 합니다.

키: 값

키와 값이 :으로 구분이 되어 집니다.

yaml 포맷은 데이터 파일안에 #으로 시작하는 주석 설명문을 작성을 할 수 있습니다.

ini

ini는 윈도우 관련 시스템에서 많이 사용하는 데이터 포맷파일 입니다.

# 기본 도메인을 설정합니다.
domain = localhost

위와 같이 왼쪽에 키값과 오른쪽에 데이터 값으로 = 기준으로 작성을 합니다.

ini 포맷은 데이터 파일안에 #으로 시작하는 주석 설명문을 작성을 할 수 있습니다.

php

배열값을 저장된 PHP파일입니다. PHP파일은 직접 변수를 할당하여 작성하는 방식이 아닌 return 구문을 이용하여 작성을 하게 됩니다.

<?php
return [
    'lang' => "ko",
    'theme'=>[
        'name'=>"default",
        'path'=>"../theme",
        'header'=>"header.htm",
        'footer'=>"footer.htm"
    ],
    'menu'=>"../app/data/menu.json",
    'html'=>[
        'resource'=>"../resource/html/",
        'tags_allow'=>""
    ]
];

이렇게 작성된 파일들은 include 또는 require을 통하여 변수에 할당할 수 있습니다.

if (file_exists($filename)) {
    $conf = include ($filename);
} else {
    // 설정파일이 존재하지 않습니다.
}

환경설정 패키지


지니PHP는 작성된 환경설정 파일을 프레임워크에 쉽게 로드하여 관리할 수 있는 별도의 페키지를 제공합니다. 또한 이 페키지는 공개되어 오픈소스로 진행되고 있습니다.

https://github.com/jinyphp/config

프레임웍 로드


지니PHP의 환경설정 페키지인 config는 기본적인 같이 설치가 됩니다. config 페키지를 이용하면 쉽게 프레임워크에 환경 설정 파일을 로드할 수 있습니다.

설정폴더

환경설정 파일들은 /conf 폴더에 일괄적으로 관리가 됩니다. 이곳에 설정파일들을 만들어 놓으면 됩니다.

/conf 폴더는 프레임워크 설정파일인 .env.php에 정의되어 있습니다. 설정값을 통하여 환경설정 폴더 경로도 변경을 하실 수 있습니다.

로드하기

설정파일은 사용자 코드 작성을 통하여 로드하게 됩니다.

/app/con/config.php 파일은 설정 파일들을 로드하는 역활을 수행합니다. 이 코드는 프레임워크가 실행시에 한번 호출하여 동작을 하게 됩니다.

다음은 프레임워크에서 환결설정 코드를 실행하는 루틴의 일부입니다.

// 환경설정 객체를 로드합니다. 
if ($this->Config = Registry::get("CONFIG")) {
    $Config = $this->Config;
    // 사용자 커스텀 설정 로드
    $customConf = "./app/conf/"."config.php";
    if(file_exists($customConf)){
        require $customConf;
    } else {
        $this->Config->autoSet();
    }
    $this->Config->loadFiles();            

} else {
    echo "환경설정 파일을 읽어 올 수 없습니다.";
    exit;
}

require를 통하여 코드가 실행되는 것을 보실 수 있습니다. require는 필수 동작으로 실행이 되지 않으면, 프로그램 오류를 발생합니다. 오류 발생시 PHP 스크립트가 동작을 중단합니다.

config.php

실행되는 config.php 파일에 대해서 알아보도록 하겠습니다.

<?php

// echo $_SERVER['SERVER_NAME']."<br>";
// echo $_SERVER['SERVER_PORT']."<br>";

/**
 * 사용자 정의 환경설정
 * 도메인, 포트 값을 통하여 환경설정값을 다르게 설정할 수 있습니다.
 */
if ($_SERVER['SERVER_PORT'] == 8000) {
    $Config->setFile("site.ini","site");
} else {
    $Config->setFile("site2.ini", "site");
}

/**
 * 사용자 설정파일을 정의할 수 있습니다.
 */
$Config->setFile("test.yml", "test");

config.php 는 호출되는 코어커널 메소드로 부터 $Config 인스턴스값을 전달받게 됩니다.

$Config는 인스턴스 객체로 여러 매소드를 포함하고 있습니다. setFile() 메소드는 /conf폴더안에 있는 설정값을 읽어 올 수 있도록 지정을 하는 Setter 역활을 수행합니다.

$Config->setFile("test.yml", "test");

첫번째 값는 파일명, 두번째값은 설정값을 대표하는 키값입니다.

자동로드

config.php 파일의 설정은 사용자가 직접 코드를 작성하여 로드를 하는 경우입니다.

다른 방법으로는 /conf폴더의 있는 모든 설정파일을 자동으로 로드하여 처리를 할 수 있습니다. 자동으로 설정파일을 로드하는 방법을 config.php을 삭제하거나 다른이름으로 변경을 해두는 것입니다. 만일 config.php 파일을 찾기 못하는 경우 프레임워크는 자동으로 autoSet()메소드를 호출하여 폴더안 있는 모든 설정파일을 로그하게 됩니다.

자동로드 환경설정파일을 제외하고자 하는 경우에는 파일명 앞에 _를 붙여 두면 됩니다. _가 붙은 파일명은 자동로드 검사에서 파일이 제외됩니다.

설정값 사용


지니PHP의 config 페키지를 통하여 자동로드된 설정값은 프레임워크에서 사용이 가능합니다.

config 페키지는 읽어들인 데이터 파일을 키값을 기준으로 저장 관리하게 됩니다.

/**
 * 설정값
 * 모든 값이 저장되어 있습니다.
 */
protected $_config=[];

$_config는 배열값으로 저장되어 있습니다.

헬퍼함수

config 페키지에 저장된 값을 일기 위해서는 먼저 인스턴스를 얻어 접근을 해야 합니다. 환경설정의 인스턴스를 모든 클래스에 배포하고 관리하는 것은 매우 불편합니다.

모든 객체에서 글로벌로 설정된 환경설정값을 쉽게 가지고 오기 위해서 헬퍼함수를 만들어 제공합니다. 헬퍼함수는 간단하게 함수 호출로 인하여 설정값을 읽어올 수 있습니다. 핼퍼함수는 /vendor/jiny/config/Helpers/Helper.php에 정의되어 있습니다.

conf(키) 헬퍼함수는 매개변수로 전달되는 키에 대하여 설정값을 찾아 반환하게 됩니다. 키가 여러개의 또다른 배열값을 가지고 있는 경우에는 .을 이용하여 구분을 할 수 있습니다.

$indexs = conf("ENV.Resource.Indexs"); 

위의 예제처럼 .을 이용하여 여러개의 배열값을 선택할 수 있습니다.

반환값

헬퍼함수는 입력된 키값에 대한 값을 찾아 반환을 하게 됩니다. 선택한 키의 값이 단일 값일 경우에는 해당 값을 반환을 합니다. 만일 선택한 키가 배열일 경우에는 배열값을 반환하게 됩니다.

동작원리


config 페키지의 대한 자세한 동작의 원리는 기술문서 및 소스를 참고하시면 됩니다.

버전 갱신 및 공지

본 문서는 최신 코드의 변경사항을 반영하지 못할 수도 있습니다. 코드의 변경이 이루어진 후에 본 문서가 작성이 되기 때문입니다. 이러한 시간적 차이는 발생할 수 있습니다.