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, no
및 false
값은 ""로 표시되고 on, yes
및 true
값은 "1"
로 표시됩니다. 문자 ?{}|&~!()^"는 키의 어디에도 사용할 수 없으며 값에서 특별한 의미를 갖습니다.
참고: 등호가 없는 항목은 무시됩니다. 예를 들어 "foo"는 무시되는 반면 "bar ="는 구문 분석되어 빈 값으로 추가됩니다. 예를 들어, MySQL은 my.cnf에 값을 받지 않는 "no-auto-rehash" 설정이 있으므로 무시됩니다.
참고: ini 파일은 일반적으로 웹 서버에서 일반 텍스트로 처리되므로 요청 시 브라우저에 제공됩니다. 즉, 보안을 위해 ini 파일을 docroot 외부에 보관하거나 해당 파일을 제공하지 않도록 웹 서버를 재구성해야 합니다. 둘 중 하나를 수행하지 않으면 보안 위험이 발생할 수 있습니다.
기타
- parse_ini_string() - 구성 문자열 구문 분석