parse_ini_file 함수

(PHP 4, PHP 5, PHP 7, PHP 8)

parse_ini_file — 구성 파일 구문 분석


설명

parse_ini_file(string $filename, bool $process_sections = false, int $scanner_mode = INI_SCANNER_NORMAL): array|false

parse_ini_file()filename에 지정된 ini 파일을 로드하고 그 안의 설정을 연관 배열로 반환합니다.

ini 파일의 구조는 php.ini와 동일합니다.


매개변수

filename
구문 분석 중인 ini 파일의 파일 이름입니다. 상대 경로가 사용되는 경우 현재 작업 디렉토리에 대해 상대적으로 평가된 다음 include_path를 기준으로 평가됩니다.
process_sections
process_sections 매개변수를 true로 설정하면 섹션 이름과 설정이 포함된 다차원 배열을 얻을 수 있습니다. process_sections의 기본값은 false입니다.
scanner_mode
INI_SCANNER_NORMAL(기본값) 또는 INI_SCANNER_RAW일 수 있습니다. INI_SCANNER_RAW가 제공되면 옵션 값이 구문 분석되지 않습니다.

PHP 5.6.1부터 INI_SCANNER_TYPED로 지정할 수도 있습니다. 이 모드 부울에서는 가능한 경우 null 및 정수 유형이 유지됩니다. 문자열 값 "true", "on""yes"true로 변환됩니다. "false", "off", "no""none"false으로 간주됩니다. "null"은 형식화 모드에서 null로 변환됩니다. 또한 모든 숫자 문자열은 가능한 경우 정수형으로 변환됩니다.


반환 값

설정은 성공 시 연관 배열로 반환되고 실패 시 false로 반환됩니다.


Examples

예제 #1 sample.ini의 내용

                  
; This is a sample configuration file
; Comments start with ';', as in php.ini

[first_section]
one = 1
five = 5
animal = BIRD

[second_section]
path = "/usr/local/bin"
URL = "http://www.example.com/~username"

[third_section]
phpversion[] = "5.0"
phpversion[] = "5.1"
phpversion[] = "5.2"
phpversion[] = "5.3"

urls[svn] = "http://svn.php.net"
urls[git] = "http://git.php.net"
                  
                

예제 #2 parse_ini_file() 예제

상수(__FILE__과 같은 "매직 상수"가 아님)도 ini 파일에서 구문 분석될 수 있으므로 parse_ini_file()을 실행하기 전에 상수를 ini 값으로 정의하면 결과에 통합됩니다. ini 값만 평가되며 값은 상수여야 합니다. 예를 들어:

                  
<?php

define('BIRD', 'Dodo bird');

// Parse without sections
$ini_array = parse_ini_file("sample.ini");
print_r($ini_array);

// Parse with sections
$ini_array = parse_ini_file("sample.ini", true);
print_r($ini_array);

?>
                  
                

위의 예는 다음과 유사한 결과를 출력합니다.

Array
(
    [one] => 1
    [five] => 5
    [animal] => Dodo bird
    [path] => /usr/local/bin
    [URL] => http://www.example.com/~username
    [phpversion] => Array
        (
            [0] => 5.0
            [1] => 5.1
            [2] => 5.2
            [3] => 5.3
        )

    [urls] => Array
        (
            [svn] => http://svn.php.net
            [git] => http://git.php.net
        )

)
Array
(
    [first_section] => Array
        (
            [one] => 1
            [five] => 5
            [animal] => Dodo bird
        )

    [second_section] => Array
        (
            [path] => /usr/local/bin
            [URL] => http://www.example.com/~username
        )

    [third_section] => Array
        (
            [phpversion] => Array
                (
                    [0] => 5.0
                    [1] => 5.1
                    [2] => 5.2
                    [3] => 5.3
                )

            [urls] => Array
                (
                    [svn] => http://svn.php.net
                    [git] => http://git.php.net
                )

        )

)
                

예제 #3 parse_ini_file() php.ini 파일 구문 분석

                  
<?php
// A simple function used for comparing the results below
function yesno($expression)
{
    return($expression ? 'Yes' : 'No');
}

// Get the path to php.ini using the php_ini_loaded_file() function
$ini_path = php_ini_loaded_file();

// Parse php.ini
$ini = parse_ini_file($ini_path);

// Print and compare the values, note that using get_cfg_var()
// will give the same results for parsed and loaded here
echo '(parsed) magic_quotes_gpc = ' . yesno($ini['magic_quotes_gpc']) . PHP_EOL;
echo '(loaded) magic_quotes_gpc = ' . yesno(get_cfg_var('magic_quotes_gpc')) . PHP_EOL;
?>
                  
                

위의 예는 다음과 유사한 결과를 출력합니다.

(parsed) magic_quotes_gpc = Yes
(loaded) magic_quotes_gpc = Yes
                

예제 #4 값 보간

상수를 평가하는 것 외에도 특정 문자는 ini 값에서 특별한 의미를 갖습니다. 또한 ${} 구문을 사용하여 환경 변수 및 이전에 정의된 구성 옵션(get_cfg_var() 참조)을 읽을 수 있습니다.

                  
; | is used for bitwise OR
three = 2|3

; & is used for bitwise AND
four = 6&5

; ^ is used for bitwise XOR
five = 3^6

; ~ is used for bitwise negate
negative_two = ~1

; () is used for grouping
seven = (8|7)&(6|5)

path = ${PATH}
also_five = ${five}
                  
                

예제 #5 이스케이프 문자

일부 문자는 큰따옴표로 묶인 문자열에서 특별한 의미를 가지며 백슬래시 접두사로 이스케이프해야 합니다. 우선 경계 표시로 큰따옴표 ""와 백슬래시 \ 자체(특수 문자 중 하나가 뒤에 오는 경우):

quoted = "She said \"Exactly my point\"." ; Results in a string with quote marks in it.
hint = "Use \\\" to escape double quote" ; Results in: Use \" to escape double quote
                

Windows와 같은 경로에는 예외가 있습니다. 인용된 문자열 바로 뒤에 줄 바꿈이 오는 경우 후행 백슬래시를 이스케이프하지 않을 수 있습니다.

save_path = "C:\Temp\"
                

여러 줄 값에서 큰 따옴표와 줄 바꿈을 이스케이프 처리해야 하는 경우 다음과 같은 방법으로 값 연결을 사용할 수 있습니다(큰 따옴표로 묶인 문자열이 바로 다음에 다른 문자열이 옵니다).

long_text = "Lorem \"ipsum\"""
 dolor" ; Results in: Lorem "ipsum"\n dolor
                

특별한 의미를 가진 또 다른 문자는 $(달러 기호)입니다. 여는 중괄호가 뒤에 오는 경우 이스케이프해야 합니다.

code = "\${test}"
                

이스케이프 문자는 INI_SCANNER_RAW 모드에서 지원되지 않습니다(이 모드에서 모든 문자는 "있는 그대로" 처리됨).

ini 파서는 표준 이스케이프 시퀀스(\n, \t 등)를 지원하지 않습니다. 필요한 경우 stripcslashes() 함수를 사용하여 parse_ini_file()의 결과를 후처리합니다.


노트

참고: 이 함수는 php.ini 파일과 아무 관련이 없습니다. 스크립트를 실행할 때 이미 처리되었습니다. 이 함수를 사용하여 자체 애플리케이션의 구성 파일을 읽을 수 있습니다.

참고: ini 파일의 값에 영숫자가 아닌 문자가 포함되어 있으면 큰따옴표(")로 묶어야 합니다.

참고: ini 파일의 키로 사용해서는 안 되는 예약어가 있습니다. 여기에는 null, yes, no, true, false, on, off, none이 포함됩니다. INI_SCANNER_TYPED 모드를 사용하지 않는 한 null, off, nofalse 값은 ""로 표시되고 on, yestrue 값은 "1"로 표시됩니다. 문자 ?{}|&~!()^"는 키의 어디에도 사용할 수 없으며 값에서 특별한 의미를 갖습니다.

참고: 등호가 없는 항목은 무시됩니다. 예를 들어 "foo"는 무시되는 반면 "bar ="는 구문 분석되어 빈 값으로 추가됩니다. 예를 들어, MySQL은 my.cnf에 값을 받지 않는 "no-auto-rehash" 설정이 있으므로 무시됩니다.

참고: ini 파일은 일반적으로 웹 서버에서 일반 텍스트로 처리되므로 요청 시 브라우저에 제공됩니다. 즉, 보안을 위해 ini 파일을 docroot 외부에 보관하거나 해당 파일을 제공하지 않도록 웹 서버를 재구성해야 합니다. 둘 중 하나를 수행하지 않으면 보안 위험이 발생할 수 있습니다.


기타