INI 파일 – 5.값의 평가

값의 평가

초기화 파일의 키값으로 지정할 수 있는 것은 아래와 같습니다.

  • 문자열
  • 숫자
  • 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로 설정하여야 합니다.

“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로 설정하여야 합니다.

“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″라는 키에 경로가 아래와 같이 저장되어 있다고 가정하겠습니다.

그리고 수행중인 웹문서와 초기화 파일의 위치가 아래와 같다고 가정하겠습니다.

  • 초기화 파일의 위치 : /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”에 해당되는 키명을 지정하여야 합니다.

“active_eval_path” 항목의 기본값은 false입니다. 만약 “active_eval_unit” 항목이 false로 설정되어 있으면 path1, path2, path3가 “./ini/cache”, “./../cache/board”, “./cache”로 평가되지 않고 초기화 파일에 지정된 대로 “cache”, “/web/cache/board”, “./cache”로 평가됩니다.

답글 남기기