php
PHP - php.ini 환경 설정
아래 모드는 PHP 설정을 언제, 어디서 설정할 수 있는지 결정하고, 매뉴얼의 각 지시어는 이 모드를 참조합니다. 예를 들어, 몇몇 설정은 PHP 스크립트 안에서 ini_set()으로 설정할 수 있지만, 어떤 설정은 php.ini 나 httpd.conf 에서만 설정이 가능합니다.
예를 들어, output_buffering 설정은 PHP_INI_PERDIR 이므로 ini_set()으로 설정할 수 없지만, display_errors 은 PHP_INI_ALL 이므로 ini_set()을 포함하여 php.ini, .htaccess, httpd.conf 에서 설정할 수 있습니다.
.htaccess 에 설정할 경우 스크립트 내에만 가능한 상수나 $로 시작하는 변수는 사용할 수 없습니다.
다음은 php.ini의 모든 설정목록을 배열로 가져 오게 합니다.
다음은 설정옵션중 단일의 옵션을 가져 옵니다.
다음은 설정 옵션을 강제 변경하는 함수입니다. 그러나 실제 설정 옵션이 변경되는 것은 아니며, 강제 변경은 일부 요소만 가능한 부분입니다.
이 함수는 ini 구성파일을 읽기 좋게 구문 배열로 반환해 줍니다. 쉽게 설명하면 user.ini 구성파일에 다음 내용이 있다고 가정하겠습니다.
parse_ini_file 함수로 읽어 들이면, 다음과 같이 배열로 받아 오게 됩니다.
구성파일로 에러 페이지를 만들어 보겠습니다.
비교 검색후 에러 표시는 다음과 같이 처리하면 됩니다.
이제 클레스로 만들어 보겠습니다.
현재 운영중인 서버의 환경정보를 배열로 가져 오겠습니다.
예를 들어, output_buffering 설정은 PHP_INI_PERDIR 이므로 ini_set()으로 설정할 수 없지만, display_errors 은 PHP_INI_ALL 이므로 ini_set()을 포함하여 php.ini, .htaccess, httpd.conf 에서 설정할 수 있습니다.
모 드 | 설 명 |
---|---|
PHP_INI_USER | Ini_set 이나 윈도우의 레지스트리에서 설정 |
PHP_INI_PERDIR | php.ini, .htaccess, httpd,.conf 에서 설정 |
PHP_INI_SYSTEM | php.ini, httpd.conf 에서 설정 |
PHP_INI_ALL | php,ini, .htaccess, httpd.conf, ini_set 에서 설정 |
.htaccess 에 설정할 경우 스크립트 내에만 가능한 상수나 $로 시작하는 변수는 사용할 수 없습니다.
php 설정목록을 얻거나 변경하는 함수
php 에서는 설정파일의 일부(또는 전체)의 목록을 얻거나 일시적으로 강제로 설정을 변경하거나 복구할 수 있는 기능을 제공합니다.다음은 php.ini의 모든 설정목록을 배열로 가져 오게 합니다.
<?php
// php.ini 의 모든 설정옵션을 배열로 가져옵니다.
echo php_ini_loaded_file()
// 결과: C:\php\php.ini
$ini_array = parse_ini_file(php_ini_loaded_file(), true);
print_r($ini_array);
/*
결과:
Array
(
[allow_call_time_pass_reference] => Array
(
[global_value] => 0
[local_value] => 0
[access] => 6
)
[allow_url_fopen] => Array
(
[global_value] => 1
[local_value] => 1
[access] => 4
)
...
)
*/
?>
<?php
$ini_array = ini_get_all();
/*
결과:
Array
(
[allow_call_time_pass_reference] => Array
(
[global_value] => 0
[local_value] => 0
[access] => 6
)
[allow_url_fopen] => Array
(
[global_value] => 1
[local_value] => 1
[access] => 4
)
...
)
*/
?>
다음은 설정옵션중 단일의 옵션을 가져 옵니다.
<?php
// 설정옵션중 session 에 대한 설정 목록만을 전부 가져 옵니다.
print_r(ini_get_all("session"));
/*
결과:
Array
(
[session.auto_start] => Array
(
[global_value] => 0
[local_value] => 0
[access] => 7
)
[session.bug_compat_42] => Array
(
[global_value] =>
[local_value] =>
[access] => 7
)
...
}
*/
// 하나의 설정 옵션을 가져옵니다.
echo get_cfg_var("session.save_handler");
echo ini_get("session.save_handler");
// 결과: files
?>
다음은 설정 옵션을 강제 변경하는 함수입니다. 그러나 실제 설정 옵션이 변경되는 것은 아니며, 강제 변경은 일부 요소만 가능한 부분입니다.
<?php
echo ini_get('display_errors');
if (!ini_get('display_errors')) {
ini_set('display_errors', 1);
}
echo ini_get('display_errors');
?>
ini 구성파일을 읽기 좋게 구문 배열로 반환하는 함수
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 함수로 읽어 들이면, 다음과 같이 배열로 받아 오게 됩니다.
<?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 변수가 정의되지 않았습니다."
; ...
<?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 변수가 정의되지 않았습니다.
)
)
*/
?>
비교 검색후 에러 표시는 다음과 같이 처리하면 됩니다.
<?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
<?php
class Settings {
private static $instance;
private $settings;
private function __construct($ini_file) {
$this->settings = parse_ini_file($ini_file, true);
}
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
// 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);
?>
0 댓글