array parse_ini_file ( string $filename [, bool $process_sections = false [, int $scanner_mode = INI_SCANNER_NORMAL ]] ) (PHP 4, PHP 5)

이 함수는 ini 구성파일을 읽기 좋게 구문 배열로 반환해 줍니다. 쉽게 설명하여 user.ini 구성파일에 다음 내용이 있다고 가정하겠습니다.

 ; user.ini
 ; 이 파일은 샘플 구성파일입니다.
 ; 문자 앞에 ;를 넣으면 주석문자로 처리해 줍니다.

 [first_section]
 one = 1
 five = 5
 ; BIRD php 에서 상수로 정의하겠습니다.
 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"


parse_ini_file 함수로 읽어 들이면, 다음과 같이 배열로 받아 오게 됩니다.

예제 (ex $1
 <?php
 define
('BIRD''Dodo bird'
);

 // ex. #1
 $ini_array parse_ini_file("user.ini"
);
 print_r($ini_array
);

 // ex. #2
 $ini_array parse_ini_file("user.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
        ) 
 )
 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
                ) 
        ) 
 )
 */
 ?> 

구성파일로 에러 페이지를 만들어 보겠습니다.

 ; user.ini
 ; 이 파일은 샘플 구성파일입니다.
 ; 문자 앞에 ;를 넣으면 주석문자로 처리해 줍니다.

 [error]
 file_uploaded = "업로드중 에러가 발생하였습니다."
 file_moveuploaded = "업로드파일 이동중 에러가 발생하였습니다."
 file_maxuploaded = "업로드파일용량을 초과하였습니다."

 [method]
 get = "GET 으로 전송합니다."
 post = "POST 로 전송합니다."
 var = "var 변수가 정의되지 않았습니다."

 ; ...


예제(ex #2
 <?php
 $ini_array parse_ini_file("user.ini"true
);
 print_r($ini_array
);

 /*
 결과:
 Array(
    [error] => Array
        (
            [file_uploaded] => 업로드중 에러가 발생하였습니다.
            [file_moveuploaded] => 업로드파일 이동중 에러가 발생하였습니다.
            [file_maxuploaded] => 업로드파일용량을 초과하였습니다.
        )
 
    [method] => Array
        (
            [get] => GET 으로 전송합니다.
            [post] => POST 로 전송합니다. 
            [var] => var 변수가 정의되지 않았습니다.
        ) 
 )
 */
 ?> 

비교 검색후 에러 표시는 다음과 같이 처리하면 됩니다.

예제 (ex #3
 <?php
 $ini_array 
parse_ini_file("user.ini"true
); 

 if(!@
$var
){
    echo 
$ini_array['method']['var'
];
 }
 // 결과: var 변수가 정의되지 않았습니다.
 ?>

이제 클레스로 만들어 보겠습니다.

 ; settings.ini

 [General]
 url = "
http://www.example.com"

 [Database]
 host = localhost
 username = user
 password = password
 db = cms
 adapter = mysqli

예제 (ex #4
 <?php 
 class Settings 
    private static 
$instance
    private 
$settings
    
    private function 
__construct($ini_file) { 
        
$this->settings parse_ini_file($ini_filetrue); 
    } 
    
    public static function 
getInstance($ini_file) { 
        if(! isset(
self::$instance)) { 
            
self::$instance = new Settings($ini_file);            
        } 
        return 
self::$instance
    } 
    
    public function 
__get($setting) { 
        if(
array_key_exists($setting$this->settings)) { 
            return 
$this->settings[$setting]; 
        } else { 
            foreach(
$this->settings as $section) { 
                if(
array_key_exists($setting$section)) { 
                    return 
$section[$setting]; 
                } 
            } 
        } 
    } 
 } 
// end class 

 
 $settings Settings::getInstance('settings.ini'); 
 echo 
$settings->url// 결과: http://www.example.com

 print_r($settings->Database); 
 /*
 결과
 Array( 
    [host] => localhost 
    [username] => user 
    [password] => password 
    [db] => cms 
    [adapter] => mysqli 
 ) 
 */


 echo $settings->db;
 // 결과: cms  

 ?>

다음은 현제 운영중인 php 서버의 환경정보를 배열로 가져오겠습니다.

예제 (ex #5
 <?php 
 // php_ini_loaded_file 함수는 php.ini 설정파일의 경로를 가져옵니다.
 // 가능하면 보안상 php_ini_loaded_file 이 사용되지 않도록 해야 합니다.

 echo php_ini_loaded_file()
 // 결과: C:\php\php.ini

 $ini_array 
parse_ini_file(php_ini_loaded_file(), true
); 
 
print_r($ini_array
);  
 ?> 
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요