INI 파일 – 4.사용 함수

제공함수 목록

< 제공 함수 목록 >
분류 함수명 기능
초기화 생성자 객체 생성 및 평가를 위한 환경 설정
초기화 파일 읽기 read 지정된 초기화 파일 읽기 및 파일 구조 분석
초기화 파일 갱신 write 수정된 키정보를 초기화 파일에 쓰기
키값 읽기 get 섹션정보, 키정보 읽어 오기
키값 수정하기 set 키값을 수정하기, 섹션 및 키 정보를 초기화 파일에서 삭제하기

간단한 사용예제

초기화 파일 test.ini

아래와 같은 초기화 파일 test.ini가 있다고 가정하겠습니다.

php 예제 소스

초기화 파일은 아래와 같이 read(), write(), get(), set() 메소드를 통해서 파일 내용을 읽고, 파일에 쓰고, 키정보를 읽고, 수정할 수 있습니다.

$ini->read(“./ini/test.ini”) 문장에 의해 초기화 파일 “test.ini”가 읽혀지고 그 내용이 분석되어 키 정보가 추출됩니다.

$ini->set(“LOCKED”, true) 문장에 의해 글로벌 섹션의 키 “LOCKED”의 값이 Off에서 true로 변경됩니다.

$ini->set(“ErrorHandler::path”, “./error”) 문장에 의해 “ErrorHandler” 섹션에 새로운 키 “path”가 생기고 그 값으로 “./error”이 지정됩니다.

$ini->set(“ErrorHandler::MAIL_LOG”, “”) 문장에 의해서는 “ErrorHandler” 섹션에 있던 키 “MAIL_LOG”의 값인 “hwooky@phpclass.com”이 지워집니다.

이와 같이 set() 메소드를 이용하면 기존의 키에 지정된 값을 수정하거나 지울 수 있으며, 아니면 새로운 키를 만들 수도 있습니다.

브라우저에 출력된 키정보

위의 “php 예제 소스”에서 $ini->get()으로 반환된 키정보를 print_r() 함수를 이용하여 브라우저에 나타내면 아래와 같을 것입니다.

$ini->set(“LOCKED”, true) 문장에 의해 글로벌 섹션의 키 “LOCKED”의 값을 true로 변경하였으나 기록된 값을 보면 “1”로 되었음을 볼 수 있습니다. 이는 true값이 1로 평가되었기 때문이며 만약 평가 결과인 1이 아닌 true로 기록되기를 원한다면 부울린값 true 대신에 아래와 같이 문자열 “true”를 지정하여야 합니다.

  • $ini->set(“LOCKED”, “true”);

수정된 초기화 파일 test.ini

위의 “php 예제 소스”에서 $ini->write()을 실행하게 되면 test.ini 파일은 아래와 같이 수정됩니다.

이제는 INI 핸들러가 어떻게 움직이는가를 대략 이해하였을 것이라 생각합니다. 각 메소드에 대한 자세한 내용은 아래에서 항목별로 살펴보겠습니다.

생성자(constructor)

객체 생성할 때 클래스의 생성자로 전달하게 되는 정보로는 아래와 같이 값의 평가 및 값 반환 형식을 지정하기 위한 각종 환경 정보가 있습니다.

  • hIniHandler(환경 정보);

환경 정보

생성자로 전달되는 환경 정보는 아래와 같은 배열구조로 전달됩니다.

값의 평가 방법을 지정하기 위한 환경 정보

초기화 파일에 지정된 키값을 어떻게 평가할 것인가를 알려주는 정보들입니다.

< 값의 평가 방법을 지정하기 위한 환경 정보 >
항목 용도 기본값 설정예
active_eval_number 숫자 평가를 활성화 true false or not
active_eval_unit 단위 접미어 평가를 활성화 true false or not
active_eval_path 경로 평가를 활성화 false true or not
eval_path_key 경로 평가하려는 키명을 지정 array() array(path_key list)

각 정보에 따라 값이 어떻게 평가되는가는 “값의 평가” 메뉴를 참조바랍니다. 각 환경 정보를 지정하는 예를 들어보면 아래와 같습니다.

값 반환 형식을 지정하기 위한 환경 정보

parse_ini_file() 함수에 지정하는 두 번째 파라미터를 보면 process_sections라는 항목으로 이 항목을 true로 설정하면 각 키를 섹션별로 구분하여 다차원 배열로 되돌려 줍니다. 반면 false로 설정하면 섹션 구분없이 1차원배열로 되돌려 줍니다.

INI 핸들러에서도 get() 메소드로 반환되는 값을 섹션별로 구분할 수도 있고 섹션 구분없이 1차원 배열로 되돌려 받을 수도 있습니다. 이를 위해 준비된 것이 “active_process_sections” 항목입니다.

< 값 반환 형식을 지정하기 위한 환경 정보 >
항목 용도 기본값 설정예
active_process_sections get() 결과를 섹션별로 구분할 것인지 지정 false true or false or not

이 정보는 아래와 같이 생성자를 통해 “값의 평가 방법을 지정하기 위한 환경 정보”들과 함께 지정할 수 있습니다.

초기화 파일 읽기 함수 read

  • string read(“초기화 파일명”)

read() 메소드는 parse_ini_file() 함수와 같이 지정된 초기화 파일을 읽고 분석하는 일을 합니다. 단, 반환값의 특성은 서로 다릅니다. parse_ini_file() 함수가 각 키에 대한 정보를 배열에 담아 반환하는 반면 read() 메소드가 반환하는 값은 지정된 초기화 파일에 해당하는 고유번호(id)입니다. 이 고유번호를 이용하는 방법에 대하여는 아직 내부적으로 정리가 안된 상태이므로 사용할 수 없습니다.

초기화 파일 갱신 함수 write

이 함수는 수정된 각 키에 대한 값을 초기화 파일에 갱신하는 것입니다.

  • boolean write([“초기화 파일명”])

 초기화 파일명을 지정하지 않으면 read() 메소드로 읽어들인 파일에 수정된 내용을 기록합니다. 만약 다른 파일에 수정된 내용을 기록하고 싶다면 다른 이름의 초기화 파일명을 지정하면 됩니다.

위의 예제에서 read() 메소드에 의해 읽어들인 초기화 파일 “./ini/test.ini”을 수정한 후 write() 메소드를 이용하여 다른 이름의 초기화 파일 “./ini/test2.ini”에 수정된 내용을 기록합니다.

키 정보 읽기 함수 get

초기화 파일에서 읽어들인 키 정보 또는 set() 메소드로 새로이 추가된 키 정보를 얻기 위해서는 get() 메소드를 이용합니다.

글로벌 섹션에 있는 키 정보 읽기

모든 키 정보는 섹션별로 분류되어 기록됩니다. 그러나 특정 섹션에 소속되지 않는 경우, 즉 섹션없이 기록된 키정보는 모두 글로벌 섹션에 기록됩니다. 현재 INI 핸들러 내부에서 글로벌 섹션의 이름을 “*GLOBAL*”라고 지정하여 사용하고 있습니다. 그러나 이 이름은 공개된 것이 아니기 때문에 향후 버전에서 언제든지 다른 이름으로 변경될 수 있으니 이 이름으로 직접 키정보에 접근하지 말기를 바랍니다.

글로벌 섹션에 있는 키정보를 읽기 위해서는 아래와 같이 키명만을 가지고 get() 메소드를 호출하면 됩니다.

  • mixed get(“키명”)

위에 있는 “간단한 사용예제” 항목에서 예로 들은 초기화 파일 test.ini 파일을 가지고 아래와 같은 PHP 소스를 실행시켜 보지요.

$ini->get(“LOCKED”) 문장을 통해 글로벌 섹션에 있는 키 “LOCKED”의 값인 1(true)을 얻을 수 있습니다. 브라우저에는 아래와 같이 나타나겠지요.

  • LOCKED=1

$ini->set(“LOCKED”, “true”); 문장 때문에 초기화 파일 test.ini는 아래와 같이 수정되겠지요.

이와같이 섹션을 지정하지 않은 키는 모두 글로벌 섹션에 있는 키를 의미합니다.

특정 섹션에 있는 키 정보 읽기

  • mixed get(“섹션명::키명”)

“ErrorHandler” 섹션과 같이 특정 섹션에 있는 키 정보를 얻기 위해서는 키명 앞에 섹션명을 지정한 후 섹션명과 키명을 클래스에서 사용하는 범위연산자(::)로 구분하여 줍니다.

위에 있는 “간단한 사용예제” 항목에서 예로 들은 초기화 파일 test.ini 파일을 가지고 아래와 같은 PHP 소스를 실행시켜 보지요.

$ini->get(“ErrorHander::level”) 문장을 통해 “ErrorHandler” 섹션에 있는 키 “level”의 값인 정수 2039(E_ALL & ~E_NOTICE의 평가 결과값)을 얻을 수 있습니다. 브라우저에는 아래와 같이 나타나겠지요.

  • [ErrorHander]level=2039

섹션에 있는 모든 키 정보 읽기

  • array get(“섹션명::”)

섹션명과 범위연산자만 지정하고 키명을 생략하면 해당 색션에 있는 모든 키 정보가 배열로 반환됩니다.

“ErrorHandler” 섹션에 있는 모든 키 정보를 얻기 위해서는 아래와 같이 get() 메소드를 호출할 때 “ErrorHandler::”라고 지정합니다.

  • $global_section = $ini->get(“ErrorHander::”);

글로벌 섹션에 있는 모든 키정보를 얻기 위해서는 아래와 같이 범위연산자만 지정합니다.

이 소스를 실행하면 브라우저에는 아래와 같이 글로벌 섹션에 있는 모든 키 정보를 얻을 수 있습니다.

모든 섹션의 키 정보를 읽기

위와 같은 초기화 파일 test.ini에 대하여 아래와 같이 인수없이 get() 메소드를 호출하면 모든 섹션에 있는 키 정보를 읽을 수 있습니다.

위의 코드를 실행하게 되면 브라우저에는 아래와 같이 나타날 것입니다.

parse_ini_file() 함수와 마찬가지로 글로벌 섹션의 키들은 섹션 구분없이 브라우저에 표시됩니다.

키 값 수정하기, 키 값 지우기, 새로운 키를 만들기

초기화 파일에서 읽어들인 키 값을 수정하기 위해서는 set() 메소드를 이용합니다. set() 메소드가 성공적으로 수행되면 true가 반환되며, 그렇지 않으면 에러메시지를 보거나 false가 반환됩니다.

값을 지정할 때 한가지 유의할 것이 있습니다. get() 메소드에 의해 키정보를 읽을 때는 “값의 평가” 결과를 얻게 됩니다. 그러나 set() 메소드로 지정되는 값은 “값의 평가”에 관계없이 파일에 기록되는 모양대로 지정하여야 합니다.

글로벌 섹션에 있는 키 값 수정하기

  • boolean set(“키명”, 새로운값)

아래는 글로벌 섹션에 있는 키 “LOCKED”의 값을 “true”로 수정하는 소스입니다.

  • $ini->set(“LOCKED”, “true”);

특정 섹션에 있는 키 값 수정하기

  • boolean set(“섹션명::키명”, 새로운값)

아래는 “ErrorHandler” 섹션에 있는 키 “level”의 값을 “E_ALL”로 수정하는 소스입니다.

  • $ini->set(“ErrorHandler::level”, “E_ALL”);

새로운 키 정보를 만들기

  • boolean set(“섹션명::새로운키명”, 값)

아래는 “ErrorHandler” 섹션에 새로운 키 “path”를 만들고 그 값을 “./error”로 지정하는 코드입니다.

  • $ini->set(“ErrorHander::path”, “./error”);

키 값 지우기

  • boolean set(“섹션명::키명”, “”)

위와 같이 키 값을 지우려면 빈문자열을 지정하면 됩니다.

위와 같이 섹션 “ErrorHandler”에 지정된 키 “MAIL_LOG”의 값을 빈문자열로 지정하면 아래와 같이 초기화 파일이 갱신되어 있을 것입니다.

 키명 “MAIL_LOG”은 남아있고 키 값만 지워집니다.

섹션 정보, 키 정보 삭제하기

키 정보 삭제하기

키 값만 지우는 것이 아니라 키명까지 초기화 파일에서 삭제하려면 아래와 같이 set() 메소드의 두 번째 인자인 키 값을 지정하지 않으면 됩니다.

  • boolean set(“키명”)

아래는 글로벌 섹션에 있는 키 “LOCKED”의 정보를 초기화 파일에서 영구히 삭제하기 위한 소스입니다.

  • $ini->set(“LOCKED”);

위에 있는 “간단한 사용예제” 항목에서 예로 들은 초기화 파일 test.ini 파일을 가지고 이 문장을 수행한 후에 초기화 파일 test.ini을 열어보면 아래와 같이 “LOCKED” 키 정보가 완전히 삭제되었음을 볼 수 있습니다.

“ErrorHandler” 섹션에 있는 키 “level” 정보를 초기화 파일에서 삭제하기 위해서는 아래와 같은 문장을 수행하면 되겠지요.

  • $ini->set(“ErrorHandler::level”);

섹션 정보 삭제하기

섹션에 있는 모든 정보를 삭제하기 위해서는 키명을 지정하지 않고 섹션명과 범위연산자만 지정합니다.

boolean set(“섹션명::”)

예를 들어 “ErrorHandler” 섹션 전체를 초기화 파일에서 삭제하기 위해서는 아래와 같은 문장이 필요합니다.

  • $ini->set(“ErrorHander::”);

글로벌 섹션에 있는 모든 정보를 삭제하려면 범위연산자(::)만 지정합니다.

  • $ini->set(“::”);

답글 남기기