phpsource/템플릿2006. 9. 15. 09:44
written: Oct 13 2006
필터 정보
$tpl = new hTemplate(템플릿 파일 기본 디렉토리, 캐시 정보, HTML 파서 정보,
array(
'allow_filter' => 필터함수목록
)
);
후키템플릿 생성자의 네 번째 인수로 필터 정보가 전달됩니다.
allow_filter
'allow_filter' => 필터함수목록
생성자에서 지정된 허용필터명령은 모든 템플릿문서에 적용됩니다.
[code php;gutter:false] $tpl = new hTemplate( array( $theme_dir ), array( 'path' => $cache_dir, 'id' => $tpl_id ), array( 'active_tag_lowercase' => false ), array( 'allow_filter' => 'func_a, func_c, func_d, func_e, =' ) ); [/code]
"="를 지정하면 php명령과 전처리명령을 사용할 수 있습니다. "="를 제외한 "func_a", "func_c", "func_d", "func_e"는 허용되는 사용자정의 필터함수를 의미합니다. 필터상수와 내장필터함수는 아무런 제한없이 모든 템플릿문서에서 사용할 수 있습니다.
특별히 허용필터명령을 지정하지 않으면 모든 필터명령(필터상수, php명령, 전처리명령, 사용자정의 필터함수 및 내장필터함수)을 사용할 수 있습니다.
허용필터명령을 지정하지 않을 때
허용필터명령을 지정하지 않으면 모든 필터명령을 제한없이 사용할 수 있습니다.

Posted by 방글24
phpsource/템플릿2006. 8. 2. 13:07
written: Oct 26 2006
[버전1.2.0 제안서] 여기서 기술한 내용은 확정된 용법이 아니라 다음 버전을 발표할 때까지 여러분의 의견 수렴을 통해 더 검토되어야 하는 제안서(proposal)로 문법적인 내용이 다소 변경될 수 있음을 미리 밝혀둡니다.
다음 버전부터는 필터 기능을 지원하지 않습니다. 필터기능은 다른 방법으로 단순화시켜 제공할 생각입니다.
필터명령 실행시간
필터명령의 실행시간은 아래와 같은 지시자에 의해 변경될 수 있으며, 또한 혼용되어 사용될 수 있습니다.
① initialize
② premacro
③ precompile
④ compile
⑤ postcompile
⑥ preassign
⑦ assign
⑧ postassign
⑨ output
블록변수를 포함한 모든 템플릿변수의 필터명령 실행시간을 정리하면 아래표와 같습니다.
< 필터명령 실행시간 >
실행시간 단순
변수
조건
변수
블록변수 파일변수
tpl txt php tpl txt php
initialize x x x x x o x x
premacro x x x x x o x x
precompile x x o o o o o o
compile x x x x x x x x
postcompile x x o x x o x x
preassign x x o x x o x x
assign @ @ x x x x x x
postassign x x @ @ @ @ @ @
output x x x x x o x x
x : 실행시간 지정불가, o : 실행시간 지정가능, @ : 실행시간 지정가능(default)
tpl=template, txt=text document, php=php script
블록변수/파일변수에 필터명령 실행시간(execute time)을 지정하지 않으면(default 상태) 블록내용/파일내용을 assign한 직 후(postassign)에 필터링합니다. 반면 단순변수/조건변수는 assign할 때 필터링합니다. 이와 같이 각 템플릿 변수별로 실행시간 초기값이 지정되어 있습니다.
위 표의 기준과 다르게 예외적으로 compile 실행시간으로 처리되는 요소들은 아래와 같습니다.
① 필터상수(filter constants)
② 파일변수의 파일명(filename)
③ 내용형식(contents type) ctype이 php일 때에 php 문서에 포함된 템플릿 변수들
④ ctype이 template인 단순변수의 변수내용부분
compile 실행시간은 사용자가 지정할 수 없으며, 템플릿 툴이 내부적으로만 사용하는 실행시간입니다.
필터명령 실행시간을 제어하는 방법
템플릿변수의 필터명령은 각각 아래와 같이 지정합니다.
단순변수일 때 {&변수명;;필터명령}변수내용{/}
조건변수일 때 {?변수명;;필터명령}경우의수{/}
블록변수일 때 {@변수명;;필터명령}블록내용{/}
파일변수일 때 {#변수명;;필터명령}파일명{/}
실행시간에 대한 언급없이 단순히 필터명령만 지정하는 경우 위 표 <필터명령 실행시간> 의 default 실행시간으로 처리됩니다. 이러한 default 실행시간은 아래의 파일변수 예에서와 같이 다른 시간으로 강제 지정할 수 있습니다.
{#FILE;;
initialize {%
    =*include_once('{::_PATH_TO_TPLS}/filter.php');
    =|initialize_skin();
%}
premacro {%
    =|prefilter_macro();
%}
precompile {%
    ={_SELF};
%}
postcompile {%
    =|postfilter_compile();
%}
preassign {%
    =|prefilter_assign();
%}
postassign {%
    =|postfilter_assign();
%}
}./include.htm{/}
사용자정의 필터함수들은 각 실행시간에 해당 필터함수가 실행되기 전에 미리 정의되어 있어야 합니다.
강제 지정할 수 있는 실행시간은 각 변수별로 다릅니다. 각 변수별로 허용되지 않는 실행시간은 지정할 수 없으며, 지정했을 때 1.2.0 버전에서는 실행하지 않고 무시해버리나 향후 버전에서는 강제로 에러를 출력 후 프로그램을 중지시킬 수도 있으니 주의하기 바랍니다.
위의 예제에서 표기된 {_SELF}는 필터 처리할 때 사용되는 미리정의된 템플릿변수로 하위템플릿 파일인 include.htm의 내용을 가지고 있습니다. 이 템플릿 변수에 대한 자세한 정보는 "6.2.미리정의된 템플릿변수"를 참조바랍니다.
필터 FLOW
실행시간 중에 premacro, precompile, compile, postcompile으로 지정되는 필터명령들은 템플릿파일을 컴파일할 때만 수행되며, initialize으로 지정되는 필터명령은 컴파일 유무에 관계없이 define() 함수를 실행하는 초기에 수행되며, preassign, assign, postassign으로 지정되는 필터명령들은 assign() 함수를 실행할 때 수행됩니다.
output으로 지정된 필터명령들은 출력버퍼에 있는 문서를 가지고 최종 HTML 스크립트 문서를 생성할 때 수행됩니다.
< 필터 FLOW >
필터명령 구문 형식
지정할 수 있는 필터명령에는 필터상수, php명령, 전처리명령, 사용자정의 필터함수 및 내장 필터함수가 있습니다. 각각의 필터명령은 아래와 같은 표에 의해 지정됩니다.
< 필터명령 구문 형식 >
종 류 구문 형식
필터상수 {@변수명;;필터상수}내용{/}
php명령 {@변수명;;=php명령}내용{/}
전처리명령 {@변수명;;=*전처리명령}내용{/}
사용자정의 필터함수 {@변수명;;=|사용자정의 필터함수}내용{/}
내장 필터함수 {@변수명;;=>내장필터함수}내용{/}*
{@변수명;;=)내장필터함수}내용{/}
* [주의] - 2006.10.26

웹에디터에서 템플릿 문서를 작성할 때 내장 필터함수를 의미하는 "=>"가 제대로 입력되지 않는 문제가 발생하였습니다. 즉, 꺽은괄호(>)를 태그로 인식하여 "&gt;"로 저장되어 필터처리가 원하는대로 되지 않습니다. 따라서 1.2.0의 패치버전(또는 다음버전)에서 꺽은괄호(>) 대신에 둥근괄호와 같은 다른 기호를 사용하려고 합니다. 예를들어 블록변수에서의 내장 필터함수의 구문형식을 현재와 수정안을 비교하여 살펴보면 아래와 같습니다.

현재 : {@변수명;;=>내장필터함수}내용{/}
수정(안) : {@변수명;;=)내장필터함수}내용{/}
허용필터명령 지정하기
허용필터명령을 지정할 수 있는 방법은 아래와 같이 세가지입니다.
① 생성자의 네번째 인자로 새롭게 추가된 필터옵션의 allow_filter 키를 통해서
② define() 함수의 세번째 인자인 옵션의 allow_filter 키를 통해서
③ 파일변수(인클루드문)의 변수옵션 allow_filter 키를 통해서
생성자에서 지정된 허용필터명령은 모든 템플릿문서에 적용됩니다.
[code php;gutter:false] $tpl = new hTemplate(디렉토리정보, 캐시옵션, 컴파일옵션, array( 'allow_filter' => 'func_a, func_c, func_d, func_e, =' ) ); [/code]
'=' 문자를 지정하면 php명령과 전처리명령을 사용할 수 있습니다. '=' 문자를 제외한 func_a, func_c, func_d, func_e는 허용되는 사용자정의 필터함수를 의미합니다. 필터상수와 내장필터함수는 아무런 제한없이 모든 템플릿문서에서 사용할 수 있습니다.
특별히 허용필터명령을 지정하지 않으면 모든 필터명령(필터상수, php명령, 전처리명령, 사용자정의 필터함수 및 내장필터함수)을 사용할 수 있습니다.
define() 함수로 지정된 허용필터명령은 해당 define()에 지정된 템플릿 파일에만 적용됩니다. 또한 생성자에서 지정된 허용필터명령이 있을 때는 생성자에서 지정된 허용필터명령 중에서만 지정할 수 있습니다. 생성자에서 지정하지 않은 허용필터명령을 define() 함수에서 지정하더라도 무시됩니다.
[code php;gutter:false] $tpl = new hTemplate(디렉토리정보, 캐시옵션, 컴파일옵션, array( 'allow_filter' => 'func_a, func_c, func_d, func_e, =' ) ); $tpl->define('main', 'filter.htm', array( 'allow_filter' => 'func_a, func_b, func_e, func_f' ) ); [/code]
템플릿 main(템플릿파일 filter.htm)에서는 사용자정의 필터함수 func_a, func_e만 허용되며 사용자정의 필터함수 func_b, func_f와 php명령, 전처리명령은 허용되지 않습니다. 필터상수와 내장필터함수는 역시 제한없이 사용할 수 있습니다.
마지막으로 파일변수(인클루드문)에서의 허용필터명령에 대하여 살펴보겠습니다.
파일변수에서 지정된 허용필터명령은 파일변수에서 지정된 파일에만 적용됩니다. 또한 현재 템플릿 문서가 생성자 또는 define() 함수로 허용필터명령이 지정된 경우에는 지정된 허용필터명령 중에서만 지정할 수 있습니다.
위 define() 함수로 지정된 허용필터명령의 예에 있는 php 스크립트에서 사용하는 템플릿 문서 filter.htm의 내용이 아래와 같은 경우를 살펴보겠습니다.
[code html;gutter:false] <!-- template file : filter.htm -->{#SAMPLE;allow_filter=func_b, func_c, func_e, =; =|func_a(); =|func_b(); =|func_c(); =|func_d(); =|func_e(); ="[[["."{_SELF}"."]]]"; }./include.htm{/} [/code]
파일변수 SAMPLE 내에서 허용되는 사용자정의 필터함수는 func_e뿐입니다. 왜냐하면 템플릿파일 filter.htm은 define() 함수에 의해 사용자정의 필터함수 func_a, func_e만 허용되었는데 파일변수 SAMPLE에서는 이 중에 func_e만 일치하고 나머지는 define() 함수에 의해 허용되지 않는 필터함수, php명령, 초기화명령이기 때문입니다. 따라서 파일변수 SAMPLE에서 지정한 많은 필터명령중에 다섯번째 필터명령인 =|func_e();만 정상적으로 수행하고 나머지는 무시해 버립니다.
파일변수 SAMPLE에서 지정된 템플릿파일 include.htm 내에서 또 다른 파일변수가 내포되어 있을 경우에 내포된 파일변수에서는 파일변수 SAMPLE에서 허용되는 func_e 함수만 필터명령으로 사용할 수 있습니다.
이와같이 파일변수가 중첩되었을 때는 허용필터명령이 하위 파일변수로 연속적으로 전달되어 허용필터명령을 제한하게 됩니다.
허용필터명령에 와일드카드 사용하기
허용필터명령을 지정할 때 아래와 같은 세가지 와일드카드 문자를 통하여 여러개의 필터명령을 한번에 지정할 수 있습니다.
① The asterisk(*) represents a whole word or a group of characters.
② The question mark(?) represents a single character.
③ The exclamation mark(!) is a character to deny filter functions.
* 문자는 해당 문자가 없거나 하나 이상의 문자(anything or nothing) 대신에 사용될 수 있습니다. 예를 들어 func_*는 func_a, func_b, func_aaa를 모두 나타내며 * 문자 위치에 아무 문자도 없는 func_으로도 나타낼 수 있습니다.
? 문자는 임의의 한 문자(any single character)를 대표해서 나타내며, ?는 a 또는 b 또는 6과도 일치합니다. 그러나 * 문자와는 달리 반드시 하나의 문자가 있어야 합니다. 예를 들어 func_?는 func_a, func_b와는 일치하지만 func_와는 일치하지 않습니다.
! 문자는 지정된 필터명령을 허용하지 않을 때 사용하는 논리적 부정의 의미를 가진 문자입니다. !가 없으면 허용필터명령(allow filter)이 되는 것이고, !가 앞에 있으면 불허필터명령(deny filter)이 되는 것입니다. 만약 func_*에 해당하는 필터명령들을 허용하지 않으려면 !func_*와 같이 맨 앞에 ! 문자를 덧붙이기만 하면 됩니다.
허용필터명령에 일치하지 않는 필터함수 처리
아래와 같이 허용필터명령을 지정하는 4가지 예에서 필터함수명이 일치하지않는 필터함수를 어떻게 처리하는지 살펴보겠습니다.
① {#FILE;allow_filter=func_a, func_b, func_c}./test.htm{/}
② {#FILE;allow_filter=!func_a, !func_b, !func_c}./test.htm{/}
③ {#FILE;allow_filter=func_a, !func_b, func_c}./test.htm{/}
④ {#FILE;allow_filter=func_a, func_b, !func_c}./test.htm{/}
첫번째 예에서는 지정된 func_a, func_b, func_c는 모두 허용필터함수들이며, 두번째 예에서 지정된 func_a, func_b, func_c는 모두 불허필터함수들이며, 세번째와 네번째는 허용필터함수와 불허필터함수가 혼재되어 있으며 차이점은 마지막으로 지정된 필터함수가 허용필터함수냐 불허필터함수냐는 것입니다.
지정된 필터명령과 일치하지 않는 func_d라는 함수가 있다면 각 경우에 func_d 함수는 어떻게 처리될까요? 결론부터 말씀드리자면 첫번째와 세번째 예에서는 실행되지 않고 두번째와 네번째 예에서는 실행됩니다.
실행하느냐 하지않느냐의 기준이 되는 것은 마지막으로 지정된 필터명령이 허용필터명령이냐 불허필터명령이냐 하는 것입니다. 마지막 필터명령이 허용필터명령이면 일치하지 않는 필터명령들은 불허필터명령이 되는 것이고 아니면 허용필터명령이 되는 것입니다.
세번째와 네번째 예는 아래와 같이 작성하여도 같은 결과를 얻을 수 있습니다.
③ {#FILE;allow_filter=func_a, func_c}./test.htm{/}
④ {#FILE;allow_filter=!func_c}./test.htm{/}

Posted by 방글24
phpsource/템플릿2006. 8. 1. 09:31
written: Sep 20 2006
템플릿 변수값을 출력버퍼에 저장하기
output(변수명)
이 함수는 템플릿 변수에 저장되어 있는 HTML 스크립트를 템플릿출력버퍼에 저장하는 기능을 담당합니다.
[code php;gutter:false] $tpl->assign('MAIN', 'main'); $tpl->output('MAIN'); [/code]
위와 같은 경우에 output() 함수는 템플릿 변수 MAIN의 값을 출력버퍼에 저장합니다. 출력버퍼에 저장된 HTML 스크립트는 register_shutdown_function() 함수로 지정된 콜백함수가 실행될 때 브라우저로 전송됩니다.
HTML 스크립트를 출력버퍼에 저장하기
output(HTML스크립트)
output() 함수에 HTML 스크립트를 직접 지정하여 출력버퍼에 그 값을 저장할 수 있습니다.
[code php;gutter:false] $tpl->output('<p>HTML스크립트</p>'); [/code]
위와 같이 output() 함수를 이용하여 HTML 스크립트를 직접 출력버퍼에 저장할 수 있습니다. 단, 기존에 디버깅을 위해 사용되던 예약어인 '-variable', '-template', '-cache'와 블록변수명으로 사용된 단어들은 지정할 수 없습니다.
output() 함수에서 지정된 HTML 스크립트는 후키템플릿의 자체 출력버퍼(템플릿출력버퍼)를 이용하며, 템플릿출력버퍼에 저장된 HTML 스크립트는 프로그램이 종료될 때 브라우저로 전송됩니다. 또한 템플릿 객체 생성후에 print 또는 echo 함수를 이용하여 출력된 HTML 스크립트들도 모두 자체 출력버퍼에 저장된 후 HTML 스크립트보다 나중에 브라우저로 전송됩니다.
따라서 get_assigned() 함수에서 획득한 HTML 스크립트를 순서대로 브라우저로 전송하려면 print 또는 echo 함수를 이용하면 안되며, 반드시 output()함수를 이용하시기 바랍니다.
[code php;gutter:false] $tpl->output($tpl->get_assigned('MAIN')); [/code]
output() 함수를 이용한 디버깅
아래와 같이 output() 함수의 배열인수를 통해 "-variable", "-template", "-cache"를 지정하면 템플릿 변수 정보, 템플릿 구조 정보, 템플릿 캐시 정보를 얻을 수 있습니다. 수집된 정보들은 HTML 스크립트와 마찬가지로 출력버퍼에 저장되며, 프로그램이 종료된 후 브라우저로 전송합니다.
[code php;gutter:false] $tpl->output( array( '-variable', '-template', '-cache' ) ); [/code]
-variable
현재까지 할당되어 있는 템플릿변수에 대한 정보를 수집합니다.
-template
현재까지 템플릿파일로부터 읽고 파싱된 템플릿 구조에 대한 정보를 수집합니다.
-cache
1.2.0 버전부터 제공되며, 캐시관련 정보를 수집합니다.
만약 디버깅 정보 전부가 아닌 일부 템플릿 변수(또는 템플릿 구조 정보, 캐시 관련 정보)에 대하여만 보고 싶다면 아래와 같이 보고싶은 정보 항목을 명시적으로 지정하면 됩니다.
[code php;gutter:false] $tpl->output( array( '-variable PAGEVIEWS HEAD_TITLE COUNTER', '-template MAIN', '-cache DOCUMENT' ) ); [/code]
이 기능에 대한 좀 더 자세한 정보는 "2.2.템플릿 변수 정보", "2.3.템플릿 구조 정보", "2.4.템플릿 캐시 정보"를 참조바랍니다.
헤더태그 내용의 출력 순서
헤더 이전 및 헤더에 포함된 태그의 출력순서는 아래와 같습니다.
[code html;gutter:false] <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-kr"> <meta name="Generator">와 같은 메타 태그 기타 헤더 태그 </head> <body .....> [/code]
기타 헤더 태그 내용의 출력순서는 output() 함수로 처리한 순서대로 출력버퍼에 저장되며, 동일한 태그가 중복되어 나타나는 경우에는 첫번째 처리한 태그가 출력됩니다.
INCLUDE 파일이나 get_assigned() 함수로 획득한 템플릿 스크립트(서브 템플릿 스크립트)에 포함된 헤더태그 내용은 이를 포함하고 있는 메인 템플릿 파일(메인 템플릿 스크립트)에 포함된 헤더태그 내용 뒤에 추가됩니다. 한 파일 내에 포함된 서브 템플릿 스크립트가 여러 개 있을 때는 위쪽에 있는 서브 템플릿 스크립트부터 출력버퍼에 저장됩니다. 헤더태그 내와 바디태그 내 모두에 서브 템플릿 스크립트가 있을 때는 헤더태그 내에 있는 서브 템플릿 스크립트부터 출력버퍼에 저장됩니다.

Posted by 방글24
phpsource/파일분석2003. 6. 25. 10:22
0.0.1 (2003년 6월 25일)
0.0.1 베타 (2003년 5월 30일)
  •  베타버전으로 공개

'phpsource > 파일분석' 카테고리의 다른 글

{INI 파일}6.parse_ini_file()  (0) 2003.06.25
{INI 파일}5.값의 평가  (0) 2003.06.25
{INI 파일}4.사용 함수  (0) 2003.06.25
{INI 파일}3.파일 구조  (0) 2003.06.25
{INI 파일}2.INI 핸들러  (0) 2003.06.25
Posted by 방글24
phpsource/파일분석2003. 6. 25. 10:20
내장함수 parse_ini_file() 흉내내기
parse_ini_file()함수는 PHP에 내장되어 공식적으로 제공되는 함수로 초기화 파일의 키 정보를 배열 구조로 읽어들일 수 있습니다. 이 함수의 사용법에 대한 것은 php.net에서 제공하는 매뉴얼을 참조하기 바랍니다.
여기서는 이 함수와 동일한 기능을 하는 함수를 INI 핸들러를 이용하여 연습삼아 작성해 보고자 합니다.
[code php;gutter:false] /** * PHP4에서 제공되는 내장함수 parse_ini_file과 동일한 역할을 하는 함수임 * 이 함수는 정식으로 지원되지 않는 함수로 향후 버전과의 호환성이 없습니다. * * @param string $inifile ini filename * @param bool $process_sections * @return array Returns the settings in this function in an associative array. * By settting the last process_sections parameter to true, * you get a multidimemsional array, * with the section names and settings included. * @access global */ function my_parse_ini_file($inifile, $process_sections=false) { /** * INI 핸들러 클래스 파일이 있는 경로를 서버 상황에 맞게 수정할 것 */ include_once("./class/INI/class.hIniHandler.php"); $ini = new hIniHandler( array( "active_eval_number" => false, "active_eval_unit" => false, "active_eval_path" => false "active_process_sections" => $process_sections, ) ); $ini->read($inifile); return $ini->get(); } [/code]
직접 실험해 보시면 알겠지만 PHP 내장함수 parse_ini_file() 함수에서 얻은 결과와 INI 핸들러를 이용한 my_parse_ini_file() 함수에서 얻은 결과가 거의 동일하다는 것을 알 수 있을 것입니다. 이에 대한 자세한 내용은 "값의 평가" 메뉴를 참조바랍니다.

'phpsource > 파일분석' 카테고리의 다른 글

{INI 파일}7.업그레이드 및 패치  (0) 2003.06.25
{INI 파일}5.값의 평가  (0) 2003.06.25
{INI 파일}4.사용 함수  (0) 2003.06.25
{INI 파일}3.파일 구조  (0) 2003.06.25
{INI 파일}2.INI 핸들러  (0) 2003.06.25
Posted by 방글24
phpsource/파일분석2003. 6. 25. 10:02
값의 평가
초기화 파일의 키값으로 지정할 수 있는 것은 아래와 같습니다.
  • 문자열
  • 숫자
  • PHP 상수(예를 들어 E_ALL)
  • 초기화 파일에서 사용되는 상수들((On, Off, True, False, Yes, No 및 None)
  • 문자열 연산이 아닌 수식(예를 들어 E_ALL & ~E_NOTICE)
  • 이중인용부호(")로 둘러싸인 문자열(예를 들어 "foo")
이러한 키값은 각각에 대하여 평가결과가 다르게 나타납니다.
< 키 값의 평가 및 형식 >
키값 평가에 의한 결과 형식
On, True, Yes true boolean
Off, False, No false boolean

None

빈문자열(empty string)

string

숫자로만 구성된 값 해당 숫자 integer, double

16진수

10진수로 변환된 값

integer

8진수

10진수로 변환된 값

integer

지수

10진수로 변환된 값

integer, double

문자열 연산이 아닌 수식

연산 결과값 integer, double, boolean

단위접미어가 붙은 숫자

단위 배수가 곱해진 값

integer, double
이중인용부호(")로 둘러싸여있는 값 이중인용부호(") 안쪽에 있는 문자열 string
On, True, Yes
On, True, Yes으로 지정된 값은 boolean 형식의 true로 평가됩니다. 초기화 파일에서 사용되는 상수인 On, True, Yes는 대소문자를 구별하지 않습니다.
아래는 모두 동일한 값을 지정한 것입니다.
short_open_tag = On
short_open_tag = True
short_open_tag = Yes
그러나 아래와 같이 숫자 1을 지정하게 되면 평가결과는 정수값 1입니다.
short_open_tag = 1
Off, False, No
Off, False, No으로 지정된 값은 boolean 형식의 false로 평가됩니다. 초기화 파일에서 사용되는 상수인 Off, False, No는 대소문자를 구별하지 않습니다.
아래는 모두 동일한 값을 지정한 것입니다.
short_open_tag = Off
short_open_tag = False
short_open_tag = No
그러나 아래와 같이 숫자 0을 지정하게 되면 평가결과는 정수값 0입니다.
short_open_tag = 0
None
값이 빈문자열(empty string)로 평가받기 위해서는 아래와 같이 두가지 방법 중에 한가지로 그 값을 지정하여야 합니다.
foo = ; sets foo to an empty string
foo = none ; sets foo to an empty string
만약 빈문자열이 아니라 "none"라는 문자열을 지정하려면 아래와 같이 이중인용부호(")로 둘러싸야 합니다.
foo = "none" ; sets foo to the string 'none'
초기화 파일에서 사용되는 상수인 None은 대소문자를 구별하지 않습니다.
숫자로만 구성된 값
아래와 같이 지정된 값이 숫자로만 구성되어 있는 경우에는 지정된 값을 정수 20으로 바꾸어줍니다.
max_execution_time = 20 ; Maximum execution time of each script, in seconds
지정된 값에 소수점이 포함되어 있으면 실수형(double)로 평가되고, 소수점이 없으면 정수형(integer)로 평가됩니다.
이와같이 문자열 "20"이 아닌 정수 20으로 평가되기 위해서는 객체 생성할 때 생성자로 넘겨주는 평가를 위한 환경정보 중 "active_eval_number" 항목을 true로 설정하여야 합니다.
[code php;gutter:false] include_once("./class/INI/class.hIniHandler.php"); $ini = &new hIniHandler( "./ini/ErrorHandler.ini", array ( "active_eval_number" => true ) ); [/code]
"active_eval_number" 항목의 기본값은 true입니다. 만약 "active_eval_number" 항목이 false로 설정되어 있으면 정수 20으로 평가되지 않고 문자열 "20"으로 평가됩니다.
16진수
아래와 같이 지정된 값의 첫문자가 "#"이거나 "ox"이고 나머지 문자가 숫자로만 구성되어 있는 경우에는 지정된 값을 16진수로 해석하며 평가결과는 10진수로 바꾸어줍니다.
max_execution_time = ox14 ; hexadecimal number (equivalent to 20 decimal)
이와같이 문자열 "ox14"이 아닌 정수 20으로 평가하기 위해서는 객체 생성할 때 생성자로 넘겨주는 평가를 위한 환경정보 중 "active_eval_number" 항목을 true로 설정하여야 합니다.
만약 "active_eval_number" 항목이 false로 설정되어 있으면 정수 20으로 평가되지 않고 문자열 "ox14"로 평가됩니다.
16진수를 의미하는 접두어 "ox"는 대소문자를 구분하지 않습니다.
8진수
아래와 같이 지정된 값의 첫문자가 영문자 "o"이고 나머지 문자가 숫자로만 구성되어 있는 경우에는 지정된 값을 8진수로 해석하며 평가결과는 10진수로 바꾸어줍니다.
max_execution_time = o24 ; octal number (equivalent to 20 decimal)
이와같이 문자열 "o24"이 아닌 정수 20으로 평가하기 위해서는 객체 생성할 때 생성자로 넘겨주는 평가를 위한 환경정보 중 "active_eval_number" 항목을 true로 설정하여야 합니다.
만약 "active_eval_number" 항목이 false로 설정되어 있으면 정수 20으로 평가되지 않고 문자열 "o24"로 평가됩니다.
8진수를 의미하는 접두어 "o"는 대소문자를 구분하지 않습니다.
지수
아래와 같이 지정된 값이 지수형으로 나타낸 숫자인 경우에는 지정된 값을 지수형으로 해석하며 평가결과는 10진수로 바꾸어줍니다.
max_execution_time = 1.23e3 ;  an exponent (equivalent to 1234 decimal)
max_execution_time = 0.003e2 ;  an exponent (equivalent to 0.3 decimal)
10진수로 변환된 후의 값에 소수점이 포함되어 있으면 실수형(double)로 평가하고, 소수점이 없으면 정수형(integer)로 평가합니다.
이와같이 문자열 "1.23e3", "0.003e2"이 아닌 정수 1234, 실수 0.3으로 평가되기 위해서는 객체 생성할 때 생성자로 넘겨주는 평가를 위한 환경정보 중 "active_eval_number" 항목을 true로 설정하여야 합니다.
만약 "active_eval_number" 항목이 false로 설정되어 있으면 정수 1234, 실수 0.3으로 평가되지 않고 문자열 "1.23e3", "0.003e2"로 평가됩니다.
문자열 연산이 아닌 수식
아래와 같이 PHP의 문법에 맞는 수식일 경우에는 그 결과값을 얻을 수 있습니다. 단 지정된 값이 문자열 연산과 같이 문자열이 포함된 경우는 정확한 수식 결과를 얻을 수 없습니다.
error_reporting = E_ALL & ~E_NOTICE
"active_eval_number"가 true인 경우에는 정수 2039라는 결과를 얻습니다.
만약 "active_eval_number" 항목이 false로 설정되어 있으면 정수 2039으로 평가되지 않고 문자열 "2039"로 평가됩니다. "active_eval_number" 항목이 false라고 하더라도 값이 수식인 경우에는 그 수식 그대로인 문자열 "E_ALL & ~E_NOTICE"로 평가되는 것은 아니며 일단 E_ALL & ~E_NOTICE의 결과값인 2039값에 대하여 문자열로 평가됩니다.
PHP 내장함수 parse_ini_file() 함수에서는 "active_eval_number"가 false인 경우와 마찬가지로 문자열 "2039"라는 결과를 얻습니다.
지정된 PHP에서 제공하는 여러 가지 연산자가 포함된 수식인 경우에는 PHP 내장함수 parse_ini_file() 함수와 다르게 평가될 수 있으니 이러한 경우는 그 결과를 먼저 확인한 후 사용하시기 바랍니다.
이중인용부호(")로 둘러싸여있는 값
On, Off, True, False, Yes, No, None, E_ALL, E_ALL & ~E_NOTICE와 같이 상수나 수식이 아닌 문자열로 해석되도록 하려면 앞뒤로 이중인용부호를 붙여야 합니다.
str = "On"
str = "none"
str = "30"
str = "E_ALL & ~E_NOTICE"
단위 접미어가 붙여진 숫자인 경우
숫자 뒤에 K, M, G, T와 같은 컴퓨터에서 사용되는 단위 접미어가 붙게되면 단위 배수가 곱해진 값으로 평가됩니다. 예를 들어 아래와 같이 숫자 뒤에 K(킬로) 단위 접미어가 붙게되면 지정된 숫자값에 1024를 곱한 값으로 평가됩니다.
maxsize = 10K
따라서 위의 값 10K는 아래와 같이 10 * 1024인 10240으로 지정한 것과 같은 결과를 얻을 수 있습니다.
maxsize = 10240
이러한 평가결과를 얻으려면 객체 생성할 때 생성자로 넘겨주는 평가를 위한 환경정보 중 "active_eval_unit" 항목을 true로 설정하여야 합니다.
[code php;gutter:false] include_once("./class/INI/class.hIniHandler.php"); $ini = &new hIniHandler( "./ini/ErrorHandler.ini", array ( "active_eval_unit" => true ) ); [/code]
"active_eval_unit" 항목의 기본값은 true입니다. 만약 "active_eval_unit" 항목이 false로 설정되어 있으면 정수 10240으로 평가되지 않고 문자열 "10K"로 평가됩니다.
지원되는 단위 접미어는 아래 표와 같으며 단위 접미어는 반드시 대문자로 지정하여야 정확히 평가될 수 있습니다.
< 단위 접미어 >
단위 접미어 단위 접미어의 명칭 단위에 곱해지는 배수
K 킬로 1,024
M 메가

1,048,576

G

기가

1,073,741,824

T 테라

1,099,511,627,776

경로 정보
경로를 지정하는 방법은 크게 세가지가 있습니다. [CACHE] 섹션에 "path1", "path2", "path3"라는 키에 경로가 아래와 같이 저장되어 있다고 가정하겠습니다.
[CACHE]
path1 = cache
path2 = /web/cache/board
path3 = ./cache
그리고 수행중인 웹문서와 초기화 파일의 위치가 아래와 같다고 가정하겠습니다.
초기화 파일의 위치 : /web/test/ini/error.ini
웹문서의 위치 : /web/test/index.php
"path2"과 같이 슬래시(/)로 시작하는 경우는 절대경로로 해석합니다. 평가결과는 이러한 절대경로를 현재 웹문서의 경로(/web/test/index.php)를 기준으로 상대경로로 바꾸어 줍니다. 따라서 평가결과는 "./../cache/board"가 됩니다.
"path3"와 같이 마침표(.)로 시작하는 경우는 현재 웹문서의 경로를 기준으로 지정하였다고 해석합니다. 따라서 이러한 경우에는 지정된 경로를 수정하지 않습니다. 결국 현제 웹문서의 경로를 기준으로 한 경로가 되겠지요.
마지막으로 "path1"과 같이 슬래시(/)로 시작하지도 않고 마침표(.)로 시작하지도 않는 경우는 초기화 파일이 있는 경로를 기준으로 지정하였다고 해석합니다. 평가결과는 이러한 초기화 파일을 기준으로 하는 경로 대신에 웹문서의 경로를 기준으로 하는 경로로 바꾸어줍니다. 따라서 평가결과는 "./ini/cache"가 됩니다.
이와같이 경로를 나타내는 값을 웹문서의 경로를 기준으로하는 상대경로로 바꾸어주기 위해서는 객체 생성할 때 생성자로 넘겨주는 평가를 위한 환경정보 중 "active_eval_path" 항목을 true로 설정하는 동시에 "eval_path_key"에 해당되는 키명을 지정하여야 합니다.
[code php;gutter:false] include_once("./class/INI/class.hIniHandler.php"); $ini = &new hIniHandler( "./ini/ErrorHandler.ini", array ( "active_eval_path" => true, "eval_path_key" => array("path1", "path2", "path3") ) ); [/code]
"active_eval_path" 항목의 기본값은 false입니다. 만약 "active_eval_unit" 항목이 false로 설정되어 있으면 path1, path2, path3가 "./ini/cache", "./../cache/board", "./cache"로 평가되지 않고 초기화 파일에 지정된 대로 "cache", "/web/cache/board", "./cache"로 평가됩니다.

'phpsource > 파일분석' 카테고리의 다른 글

{INI 파일}7.업그레이드 및 패치  (0) 2003.06.25
{INI 파일}6.parse_ini_file()  (0) 2003.06.25
{INI 파일}4.사용 함수  (0) 2003.06.25
{INI 파일}3.파일 구조  (0) 2003.06.25
{INI 파일}2.INI 핸들러  (0) 2003.06.25
Posted by 방글24
phpsource/파일분석2003. 6. 25. 09:49
제공함수 목록
< 제공 함수 목록 >
분류 함수명 기능
초기화 생성자 객체 생성 및 평가를 위한 환경 설정
초기화 파일 읽기 read 지정된 초기화 파일 읽기 및 파일 구조 분석

초기화 파일 갱신

write

수정된 키정보를 초기화 파일에 쓰기
키값 읽기 get 섹션정보, 키정보 읽어 오기
키값 수정하기 set 키값을 수정하기, 섹션 및 키 정보를 초기화 파일에서 삭제하기
간단한 사용예제
초기화 파일 test.ini
아래와 같은 초기화 파일 test.ini가 있다고 가정하겠습니다.
; test configuration settings
; written by : hwooky hwooky@phpclass.com
; last modified : 2003.05.30
;
LOCKED = Off ; On/Off

[ErrorHandler]
;
; - Show only errors
;
level = E_ALL & ~E_NOTICE
MAIL_LOG = hwooky@phpclass.com
php 예제 소스
초기화 파일은 아래와 같이 read(), write(), get(), set() 메소드를 통해서 파일 내용을 읽고, 파일에 쓰고, 키정보를 읽고, 수정할 수 있습니다.
[code php;gutter:false] include_once("./class/INI/class.hIniHandler.php"); $ini = new hIniHandler(); $ini->read("./ini/test.ini"); $ini->set("LOCKED", true); $ini->set("ErrorHandler::path", "./error"); $ini->set("ErrorHandler::MAIL_LOG", ""); print "<PRE>"; print_r($ini->get()); print "</PRE>"; $ini->write(); [/code]
$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() 함수를 이용하여 브라우저에 나타내면 아래와 같을 것입니다.
Array
(
[*GLOBAL*] => Array
(
[LOCKED] => 1
)

[ErrorHandler] => Array
(
[level] => 2039
[MAIL_LOG] =>
[path] => ./error
)

)
$ini->set("LOCKED", true) 문장에 의해 글로벌 섹션의 키 "LOCKED"의 값을 true로 변경하였으나 기록된 값을 보면 "1"로 되었음을 볼 수 있습니다. 이는 true값이 1로 평가되었기 때문이며 만약 평가 결과인 1이 아닌 true로 기록되기를 원한다면 부울린값 true 대신에 아래와 같이 문자열 "true"를 지정하여야 합니다.
[code php;gutter:false] $ini->set("LOCKED", "true"); [/code]
수정된 초기화 파일 test.ini
위의 "php 예제 소스"에서 $ini->write()을 실행하게 되면 test.ini 파일은 아래와 같이 수정됩니다.
; test configuration settings
; written by : hwooky hwooky@phpclass.com
; last modified : 2003.05.30
;
LOCKED = 1 ; On/Off

[ErrorHandler]
;
; - Show only errors
;
level = E_ALL & ~E_NOTICE
MAIL_LOG =
path= ./error
이제는 INI 핸들러가 어떻게 움직이는가를 대략 이해하였을 것이라 생각합니다. 각 메소드에 대한 자세한 내용은 아래에서 항목별로 살펴보겠습니다.
생성자(constructor)
객체 생성할 때 클래스의 생성자로 전달하게 되는 정보로는 아래와 같이 값의 평가 및 값 반환 형식을 지정하기 위한 각종 환경 정보가 있습니다.
hIniHandler(환경 정보);
환경 정보
생성자로 전달되는 환경 정보는 아래와 같은 배열구조로 전달됩니다.
[code php;gutter:false] $ini = new hIniHandler( array( "active_eval_number" => false or not, // default is true "active_eval_unit" => false or not, // default is true "active_eval_path" => true or not, // default is false "eval_path_key" => list of path_key // default is array() "active_process_sections" => true or false or not, // default is false ) ); [/code]
값의 평가 방법을 지정하기 위한 환경 정보
초기화 파일에 지정된 키값을 어떻게 평가할 것인가를 알려주는 정보들입니다.
< 값의 평가 방법을 지정하기 위한 환경 정보 >
항목 용도 기본값 설정예

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)
각 정보에 따라 값이 어떻게 평가되는가는 "값의 평가" 메뉴를 참조바랍니다. 각 환경 정보를 지정하는 예를 들어보면 아래와 같습니다.
[code php;gutter:false] include_once("./class/INI/class.hIniHandler.php"); $ini = new hIniHandler( array( "active_eval_number" => true, // 기본값이 true이므로 생략가능 "active_eval_unit" => true, // 기본값이 true이므로 생략가능 "active_eval_path" => true, "eval_path_key" => array("path1", "path2", "path3") ) ); [/code]
값 반환 형식을 지정하기 위한 환경 정보
parse_ini_file() 함수에 지정하는 두 번째 파라미터를 보면 process_sections라는 항목으로 이 항목을 true로 설정하면 각 키를 섹션별로 구분하여 다차원 배열로 되돌려 줍니다. 반면 false로 설정하면 섹션 구분없이 1차원배열로 되돌려 줍니다.
INI 핸들러에서도 get() 메소드로 반환되는 값을 섹션별로 구분할 수도 있고 섹션 구분없이 1차원 배열로 되돌려 받을 수도 있습니다. 이를 위해 준비된 것이 "active_process_sections" 항목입니다.
< 값 반환 형식을 지정하기 위한 환경 정보 >
항목 용도 기본값 설정예
active_process_sections

get() 결과를 섹션별로 구분할 것인지 지정

false

true or false or not

이 정보는 아래와 같이 생성자를 통해 "값의 평가 방법을 지정하기 위한 환경 정보"들과 함께 지정할 수 있습니다.
[code php;gutter:false] include_once("./class/INI/class.hIniHandler.php"); $ini = new hIniHandler( array( "active_eval_path" => true, "eval_path_key" => array("path1", "path2", "path3"), "active_process_sections" => true ) ); [/code]
초기화 파일 읽기 함수 read
string read("초기화 파일명")
read() 메소드는 parse_ini_file() 함수와 같이 지정된 초기화 파일을 읽고 분석하는 일을 합니다. 단, 반환값의 특성은 서로 다릅니다. parse_ini_file() 함수가 각 키에 대한 정보를 배열에 담아 반환하는 반면 read() 메소드가 반환하는 값은 지정된 초기화 파일에 해당하는 고유번호(id)입니다. 이 고유번호를 이용하는 방법에 대하여는 아직 내부적으로 정리가 안된 상태이므로 사용할 수 없습니다.
[code php;gutter:false] include_once("./class/INI/class.hIniHandler.php"); $ini = new hIniHandler(); $ini->read("./ini/ErrorHandler.ini"); [/code]
초기화 파일 갱신 함수 write
이 함수는 수정된 각 키에 대한 값을 초기화 파일에 갱신하는 것입니다.
boolean write(["초기화 파일명"])
 초기화 파일명을 지정하지 않으면 read() 메소드로 읽어들인 파일에 수정된 내용을 기록합니다. 만약 다른 파일에 수정된 내용을 기록하고 싶다면 다른 이름의 초기화 파일명을 지정하면 됩니다.
[code php;gutter:false] include_once("./class/INI/class.hIniHandler.php"); $ini = new hIniHandler(); $ini->read("./ini/test.ini"); $ini->set("LOCKED", true); $ini->set("ErrorHandler::path", "./error"); $ini->set("ErrorHandler::MAIL_LOG", ""); $ini->write("./ini/test2.ini"); [/code]
위의 예제에서 read() 메소드에 의해 읽어들인 초기화 파일 "./ini/test.ini"을 수정한 후 write() 메소드를 이용하여 다른 이름의 초기화 파일 "./ini/test2.ini"에 수정된 내용을 기록합니다.
키 정보 읽기 함수 get
초기화 파일에서 읽어들인 키 정보 또는 set() 메소드로 새로이 추가된 키 정보를 얻기 위해서는 get() 메소드를 이용합니다.
글로벌 섹션에 있는 키 정보 읽기
모든 키 정보는 섹션별로 분류되어 기록됩니다. 그러나 특정 섹션에 소속되지 않는 경우, 즉 섹션없이 기록된 키정보는 모두 글로벌 섹션에 기록됩니다. 현재 INI 핸들러 내부에서 글로벌 섹션의 이름을 "*GLOBAL*"라고 지정하여 사용하고 있습니다. 그러나 이 이름은 공개된 것이 아니기 때문에 향후 버전에서 언제든지 다른 이름으로 변경될 수 있으니 이 이름으로 직접 키정보에 접근하지 말기를 바랍니다.
글로벌 섹션에 있는 키정보를 읽기 위해서는 아래와 같이 키명만을 가지고 get() 메소드를 호출하면 됩니다.
mixed get("키명")
위에 있는 "간단한 사용예제" 항목에서 예로 들은 초기화 파일 test.ini 파일을 가지고 아래와 같은 PHP 소스를 실행시켜 보지요.
[code php;gutter:false] include_once("./class/INI/class.hIniHandler.php"); $ini = new hIniHandler(); $ini->read("./ini/test.ini"); $ini->set("LOCKED", "true"); print "LOCKED=" . $ini->get("LOCKED") . "<BR>\n"; [/code]
$ini->get("LOCKED") 문장을 통해 글로벌 섹션에 있는 키 "LOCKED"의 값인 1(true)을 얻을 수 있습니다. 브라우저에는 아래와 같이 나타나겠지요.
LOCKED=1
$ini->set("LOCKED", "true"); 문장 때문에 초기화 파일 test.ini는 아래와 같이 수정되겠지요.
; test configuration settings
; written by : hwooky hwooky@
; last modified : 2003.05.30
;
LOCKED = true ; On/Off

[ErrorHandler]
;
; - Show only errors
;
level = E_ALL & ~E_NOTICE
MAIL_LOG = hwooky@phpclass.com
이와같이 섹션을 지정하지 않은 키는 모두 글로벌 섹션에 있는 키를 의미합니다.
특정 섹션에 있는 키 정보 읽기
mixed get("섹션명::키명")
"ErrorHandler" 섹션과 같이 특정 섹션에 있는 키 정보를 얻기 위해서는 키명 앞에 섹션명을 지정한 후 섹션명과 키명을 클래스에서 사용하는 범위연산자(::)로 구분하여 줍니다.
위에 있는 "간단한 사용예제" 항목에서 예로 들은 초기화 파일 test.ini 파일을 가지고 아래와 같은 PHP 소스를 실행시켜 보지요.
[code php;gutter:false] include_once("./class/INI/class.hIniHandler.php"); $ini = new hIniHandler(); $ini->read("./ini/test.ini"); print "[ErrorHander]level=" . $ini->get("ErrorHander::level") . "<BR>\n"; [/code]
$ini->get("ErrorHander::level") 문장을 통해 "ErrorHandler" 섹션에 있는 키 "level"의 값인 정수 2039(E_ALL & ~E_NOTICE의 평가 결과값)을 얻을 수 있습니다. 브라우저에는 아래와 같이 나타나겠지요.
[ErrorHander]level=2039
섹션에 있는 모든 키 정보 읽기
array get("섹션명::")
섹션명과 범위연산자만 지정하고 키명을 생략하면 해당 색션에 있는 모든 키 정보가 배열로 반환됩니다.
"ErrorHandler" 섹션에 있는 모든 키 정보를 얻기 위해서는 아래와 같이 get() 메소드를 호출할 때 "ErrorHandler::"라고 지정합니다.
[code php;gutter:false] $global_section = $ini->get("ErrorHander::"); [/code]
글로벌 섹션에 있는 모든 키정보를 얻기 위해서는 아래와 같이 범위연산자만 지정합니다.
[code php;gutter:false] $global_section = $ini->get("::"); print "<PRE>"; print_r($global_section); print "</PRE>"; [/code]
이 소스를 실행하면 브라우저에는 아래와 같이 글로벌 섹션에 있는 모든 키 정보를 얻을 수 있습니다.
Array
(
[LOCKED] =>

)
모든 섹션의 키 정보를 읽기
; test configuration settings
; written by : hwooky hwooky@phpclass.com
; last modified : 2003.05.30
;
LOCKED = On ; On/Off

[ErrorHandler]
;
; - Show only errors
;
level = E_ALL & ~E_NOTICE
MAIL_LOG = hwooky@phpclass.com
위와 같은 초기화 파일 test.ini에 대하여 아래와 같이 인수없이 get() 메소드를 호출하면 모든 섹션에 있는 키 정보를 읽을 수 있습니다.
[code php;gutter:false] include_once("./class/INI/class.hIniHandler.php"); $ini = new hIniHandler( array( "active_process_sections" => true ) ); $ini->read("./ini/test.ini"); print "<PRE>"; print_r($ini->get()); print "</PRE>"; [/code]
위의 코드를 실행하게 되면 브라우저에는 아래와 같이 나타날 것입니다.
Array
(
[LOCKED] => 1

[ErrorHandler] => Array
(
[level] => 2039
[MAIL_LOG] => hwooky@phpclass.com
[path] => ./error
)

)
parse_ini_file() 함수와 마찬가지로 글로벌 섹션의 키들은 섹션 구분없이 브라우저에 표시됩니다.
키 값 수정하기, 키 값 지우기, 새로운 키를 만들기
초기화 파일에서 읽어들인 키 값을 수정하기 위해서는 set() 메소드를 이용합니다. set() 메소드가 성공적으로 수행되면 true가 반환되며, 그렇지 않으면 에러메시지를 보거나 false가 반환됩니다.
값을 지정할 때 한가지 유의할 것이 있습니다. get() 메소드에 의해 키정보를 읽을 때는 "값의 평가" 결과를 얻게 됩니다. 그러나 set() 메소드로 지정되는 값은 "값의 평가"에 관계없이 파일에 기록되는 모양대로 지정하여야 합니다.
글로벌 섹션에 있는 키 값 수정하기
boolean set("키명", 새로운값)
아래는 글로벌 섹션에 있는 키 "LOCKED"의 값을 "true"로 수정하는 소스입니다.
[code php;gutter:false] $ini->set("LOCKED", "true"); [/code]
특정 섹션에 있는 키 값 수정하기
boolean set("섹션명::키명", 새로운값)
아래는 "ErrorHandler" 섹션에 있는 키 "level"의 값을 "E_ALL"로 수정하는 소스입니다.
[code php;gutter:false] $ini->set("ErrorHandler::level", "E_ALL"); [/code]
새로운 키 정보를 만들기
boolean set("섹션명::새로운키명", 값)
아래는 "ErrorHandler" 섹션에 새로운 키 "path"를 만들고 그 값을 "./error"로 지정하는 코드입니다.
[code php;gutter:false] $ini->set("ErrorHander::path", "./error"); [/code]
키 값 지우기
boolean set("섹션명::키명", "")
위와 같이 키 값을 지우려면 빈문자열을 지정하면 됩니다.
[code php;gutter:false] $ini->set("ErrorHandler::MAIL_LOG", ""); $ini->write(); [/code]
위와 같이 섹션 "ErrorHandler"에 지정된 키 "MAIL_LOG"의 값을 빈문자열로 지정하면 아래와 같이 초기화 파일이 갱신되어 있을 것입니다.
; test configuration settings
; written by : hwooky hwooky@phpclass.com
; last modified : 2003.05.30
;
LOCKED = Off ; On/Off

[ErrorHandler]
;
; - Show only errors
;
level = E_ALL & ~E_NOTICE
MAIL_LOG =
 키명 "MAIL_LOG"은 남아있고 키 값만 지워집니다.
섹션 정보, 키 정보 삭제하기
키 정보 삭제하기
키 값만 지우는 것이 아니라 키명까지 초기화 파일에서 삭제하려면 아래와 같이 set() 메소드의 두 번째 인자인 키 값을 지정하지 않으면 됩니다.
boolean set("키명")
아래는 글로벌 섹션에 있는 키 "LOCKED"의 정보를 초기화 파일에서 영구히 삭제하기 위한 소스입니다.
[code php;gutter:false] $ini->set("LOCKED"); [/code]
위에 있는 "간단한 사용예제" 항목에서 예로 들은 초기화 파일 test.ini 파일을 가지고 이 문장을 수행한 후에 초기화 파일 test.ini을 열어보면 아래와 같이 "LOCKED" 키 정보가 완전히 삭제되었음을 볼 수 있습니다.
; test configuration settings
; written by : hwooky hwooky@
; last modified : 2003.05.30
;

[ErrorHandler]
;
; - Show only errors
;
level = E_ALL & ~E_NOTICE
MAIL_LOG = hwooky@phpclass.com
"ErrorHandler" 섹션에 있는 키 "level" 정보를 초기화 파일에서 삭제하기 위해서는 아래와 같은 문장을 수행하면 되겠지요.
[code php;gutter:false] $ini->set("ErrorHandler::level"); [/code]
섹션 정보 삭제하기
섹션에 있는 모든 정보를 삭제하기 위해서는 키명을 지정하지 않고 섹션명과 범위연산자만 지정합니다.
boolean set("섹션명::")
예를 들어 "ErrorHandler" 섹션 전체를 초기화 파일에서 삭제하기 위해서는 아래와 같은 문장이 필요합니다.
[code php;gutter:false] $ini->set("ErrorHander::"); [/code]
글로벌 섹션에 있는 모든 정보를 삭제하려면 범위연산자(::)만 지정합니다.
[code php;gutter:false] $ini->set("::"); [/code]

'phpsource > 파일분석' 카테고리의 다른 글

{INI 파일}6.parse_ini_file()  (0) 2003.06.25
{INI 파일}5.값의 평가  (0) 2003.06.25
{INI 파일}3.파일 구조  (0) 2003.06.25
{INI 파일}2.INI 핸들러  (0) 2003.06.25
{INI 파일}1.개요  (0) 2003.06.25
Posted by 방글24
phpsource/파일분석2003. 6. 25. 09:35
초기화 파일의 구조
초기화 파일의 구조를 알아보기 위해 php.ini 파일의 예를 들어 보겠습니다. 아래는 php.ini 파일에 있는 내용 중의 세션 관련 부분만 나타낸 것입니다.
[Session]
; Handler used to store/retrieve data.
session.save_handler = files

; Argument passed to save_handler. In the case of files, this is the path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
session.save_path = /tmp

; Whether to use cookies.
session.use_cookies = 1


; Name of the session (used as cookie name).
session.name = PHPSESSID

; Initialize session on request startup.
session.auto_start = 0

; Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 0

; The path for which the cookie is valid.
session.cookie_path = /

; The domain for which the cookie is valid.
session.cookie_domain =

; Handler used to serialize data. php is the standard serializer of PHP.
session.serialize_handler = php

; Percentual probability that the 'garbage collection' process is started
; on every session initialization.
session.gc_probability = 1

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440

; Check HTTP Referer to invalidate externally stored URLs containing ids.
session.referer_check =

; How many bytes to read from the file.
session.entropy_length = 0

; Specified here to create the session id.
session.entropy_file =

;session.entropy_length = 16

;session.entropy_file = /dev/urandom

; Set to {nocache,private,public} to determine HTTP caching aspects.
session.cache_limiter = nocache

; Document expires after n minutes.
session.cache_expire = 180

; use transient sid support if enabled by compiling with --enable-trans-sid.
session.use_trans_sid = 1

url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
초기화 파일 내용을 보면 아래와 같이 크게 4부분으로 구성되어 있습니다.
  • 섹션(section)
  • 주석(comment)
  • 빈줄(empty line)
  • 키정보(KEY=VALUE pair)
섹션(section)
초기화 파일의 각 섹션은 "[Session]"와 같이 대괄호([,])로 둘러싸인 키워드로 시작되며 이어서 여러 줄의 설정(주석, 빈줄, 키정보)이 뒤따릅니다. 섹션명은 대소문자를 구분합니다.
대부분의 키정보들은 먼저 섹션을 지정한 후 해당 섹션 내에 지정하게 됩니다. 그러나 때에 따라서는 섹션없이 바로 키를 지정할 수도 있습니다. 이 문서에서는 이와같이 섹션없이 지정된 키정보들을 담고 있는 공간을 글로벌 섹션(global section)이라고 부르겠습니다.
; test configuration settings
; written by : hwooky hwooky@phpclass.com
; last modified : 2003.05.30
;
LOCKED = Off ; On/Off - run-time changes rejected/allowed, resp.

[ErrorHandler]
;
; - Show only errors
;
level = E_ALL & ~E_NOTICE
MAIL_LOG = hwooky@phpclass.com
위와 같은 초기화 파일의 경우를 보면 키 "LOCKED"는 글로벌 섹션에 포함되며, 키 "level" 및 "MAIL_LOG"는 "ErrorHandler"라는 섹션에 포합됩니다.
주석(comment)
초기화 파일에서 주석은 세미콜론(;)으로 시작합니다. 따라서 각 행의 문장에서 세미콜론 뒤쪽에 있는 문자는 모두 주석으로 처리됩니다.
빈줄(empty line)
Whitespace로만 구성된 행은 모두 빈 행으로 처리됩니다.
키정보(KEY=VALUE pair)
각 키에 값을 할당하기 위해서 아래와 같이 지정합니다.
key = value
위에 있는 php.ini의 예제에서 볼 수 있듯이 value값은 그 값이 문자열이라 하더라도 인용부호없이 지정할 수 있습니다. 그러나 만약 value 값에 등호부호(=) 또는 세미콜론(;)과 같은 특수문자가 포함되어야 한다면 아래와 같이 이중인용부호(")로 둘러싸여 있어야 합니다.
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
이중인용부호(") 대신에 단일인용부호(')를 사용할 수 없으며, 키명은 대소문자를 구별합니다. 따라서 "foo=bar"은 "FOO=bar"과 다릅니다.
키 값에 지정할 수 있는 것은 문자열, 숫자, PHP 상수(예를 들어 E_ALL), 초기화 파일에서 사용되는 상수들(On, Off, True, False, Yes, No 및 None) 또는 수식(예를 들어 E_ALL & ~E_NOTICE) 또는 이중인용부호(")로 둘러싸인 문자열(예를 들어 "foo") 등 입니다.
초기화 파일에서 사용되는 상수들(On, Off, True, False, Yes, No 및 None)은 대소문자를 구별하지 않습니다.
초기화 파일의 보안
초기화 파일은 텍스트 파일이므로 누구나 쉽게 읽거나 바꿀 수가 있습니다. 따라서 데이터베이스에 대한 정보(호스트명,사용자명,패스워드,데이터베이스명,테이블명 등)와 같은 공개되어서는 안되는 중요한 정보가 초기화 파일에 포함되어 있다면 URL 접근을 통해 다운로드되거나 그 내용이 브라우저에 나타나지 않도록 주의해야 할 것입니다.
중요한 정보가 기록된 초기화 파일에 대한 보안을 소홀히 하게되면 심각한 결과를 초래할 수 있으니 주의하기 바랍니다.

'phpsource > 파일분석' 카테고리의 다른 글

{INI 파일}5.값의 평가  (0) 2003.06.25
{INI 파일}4.사용 함수  (0) 2003.06.25
{INI 파일}2.INI 핸들러  (0) 2003.06.25
{INI 파일}1.개요  (0) 2003.06.25
{TAR 파일}8.클래스 다운로드  (0) 2002.09.16
Posted by 방글24
phpsource/파일분석2003. 6. 25. 09:31
PHP에서의 초기화 파일 지원
PHP에서 보면 초기화 파일 php.ini를 다루어주는 함수가 아래와 같이 제공되고 있습니다.
  • ini_alter
  • ini_get_all
  • ini_get
  • ini_restore
  • ini_set
그러나 이 함수들은 단지 php.ini 파일만을 다룰 수 있습니다. php.ini 파일이 아닌 다른 일반적인 초기화 파일들을 다루기 위해서는 별도의 함수가 필요하지요. parse_ini_file() 함수가 바로 php.ini가 아닌 일반적인 초기화 파일을 다루기 위해 PHP에 내장되어 제공되는 함수입니다. 이 함수를 이용하면 초기화 파일에 기록된 모든 정보에 대한 값을 배열로 읽어 올 수 있습니다.
문제는 초기화 파일에 기록된 내용을 변경해주는 함수가 기본으로 제공되지 않는다는 것입니다. 이러한 문제 때문에 많은 PHP 개발자들은 초기화 파일의 내용을 변경시켜주는 라이브러리를 개발하여 공개하고 있습니다. 여러분이 관심만 있다면 이러한 라이브러리를 쉽게 찾아볼 수 있을 것입니다.
INI 핸들러(초기화 파일 핸들러)
여기서 제공하는 INI 핸들러는 초기화 파일을 읽거나, 키 값을 수정하거나, 수정된 내용을 파일에 기록할 수 있도록 하기 위해 작성된 라이브러리입니다.
INI 핸들러에는 아래와 같이 2개의 클래스가 포함되어 있습니다.
< INI 핸들러의 구성 >
클래스 클래스가 정의된 파일 용도
hIniParser class.hIniParser.php 초기화 파일을 읽고, 파일 내용을 분석하고, 키정보를 수정하고, 수정된 내용을 파일에 기록하기 위해 작성된 클래스
hIniHandler class.hIniHandler.php 키값을 평가하기 위해 작성된 클래스
hIniParser 클래스에서는 초기화 파일을 읽어들인 후 각 키에 대한 키값을 분리해 냅니다. 분리한 키 값을 평가하지는 않으며 단지 문자열 형태로 보관만 합니다. 키에 대한 정보 외에도 섹션 정보, 주석 정보 등을 적절히 분리해 주며, 키 정보를 읽거나 수정하거나 파일에 기록할 수 있습니다.
hIniHandler 클래스는 hIniParser 클래스에서 파생된 클래스입니다. hIniHandler 클래스에서는 hIniParser 클래스에서 분리해낸 문자열 형태의 키값을 적절히 평가하여 원하는 형태(정수형, 부울린형, 문자열형 등)의 결과를 얻어냅니다. 각 값이 어떻게 평가되는 가는 "값의 평가" 메뉴를 참조바랍니다.

'phpsource > 파일분석' 카테고리의 다른 글

{INI 파일}4.사용 함수  (0) 2003.06.25
{INI 파일}3.파일 구조  (0) 2003.06.25
{INI 파일}1.개요  (0) 2003.06.25
{TAR 파일}8.클래스 다운로드  (0) 2002.09.16
{TAR 파일}7.클래스  (0) 2002.09.09
Posted by 방글24
phpsource/파일분석2003. 6. 25. 09:23
보통 파일 확장자가 "ini"인 초기화 파일은 프로그램 환경과 초기 실행에 필요한 정보를 담고 있는 파일로 프로그램의 기본값에 대하여 지정할 수 있습니다. windows에서 사용하는 대표적인 초기화 파일에는 win.ini 와 system.ini가 있으며, PHP에서도 php.ini라는 초기화 파일이 있습니다. 이외에도 대부분의 OS 또는 응용프로그램에서 win.ini에서 사용하는 파일 형식을 이용하여 초기화 파일을 작성하고 있습니다.
개발자가 게시판과 같은 응용프로그램을 작성할 때 이러한 초기화 파일을 통해 아래와 같은 정보를 미리 지정할 수 있을 것입니다.
  • 데이터베이스에 대한 정보 - 호스트명,사용자명,패스워드,데이터베이스명,테이블명 등
  • 게시판 관리자의 ID 및 패스워드
  • 업로드 게시판일 경우에는 업로드 파일의 최대 바이트수, 업로드할 디렉토리 등
  • 게시판 목록보기에서 한 화면에 나타나고자 하는 게시물수, 페이지 링크수 등
위와 같은 정보를 생성자 또는 초기화 메소드를 통해 지정할 수도 있으나 초기화 파일을 이용하면 훨씬 융통성있는 프로그램을 작성할 수 있을 것입니다. 예를 들어 관리자 게시판을 통해 지정하게 되는 기본값을 바로 이 초기화 파일에 기록하였을 때 방문자의 게시판에서 이 초기화 파일을 이용하여 게시판을 적절히 구성할 수 있겠지요.
< 초기화 파일의 응용 >
물론 이러한 정보를 개발자가 임의의 형식으로 작성할 수도 있으나 이미 규격화된 INI 파일 형식을 이용하게 되면 다른 서버 사이드 스크립트(ASP, JSP, 파이썬, PHP 등)에서도 동일한 초기화 파일을 그대로 이용할 수 있게 됩니다. 서버 사이드 스크립트 뿐만아니라 서버 플랫폼이 윈도우가 되었든지 유닉스가 되었든지 관계없이 각 플랫폼에서 제공되는 대부분의 개발언어에서 다룰 수 있게 됩니다.
이 문서에서의 초기화 파일의 의미는 윈도우의 win.ini에서 사용하는 파일 형식(Windows INI 파일 형식)에 따라 작성된 파일을 의미합니다.

'phpsource > 파일분석' 카테고리의 다른 글

{INI 파일}3.파일 구조  (0) 2003.06.25
{INI 파일}2.INI 핸들러  (0) 2003.06.25
{TAR 파일}8.클래스 다운로드  (0) 2002.09.16
{TAR 파일}7.클래스  (0) 2002.09.09
{TAR 파일}6.zlib를 이용한 압축  (0) 2002.09.09
Posted by 방글24