아래 모드는 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 에서 설정할 수 있습니다.
모 드 | 설 명 |
---|
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
echo php_ini_loaded_file()
$ini_array = parse_ini_file(php_ini_loaded_file(), true);
print_r($ini_array);
?>
<?php
$ini_array = ini_get_all();
?>
다음은 설정옵션중 단일의 옵션을 가져 옵니다.
<?php
print_r(ini_get_all("session"));
echo get_cfg_var("session.save_handler");
echo ini_get("session.save_handler");
?>
다음은 설정 옵션을 강제 변경하는 함수입니다. 그러나 실제 설정 옵션이 변경되는 것은 아니며, 강제 변경은 일부 요소만 가능한 부분입니다.
<?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');
$ini_array = parse_ini_file("user.ini");
print_r($ini_array);
$ini_array = parse_ini_file("user.ini", true);
print_r($ini_array);
?>
구성파일로 에러 페이지를 만들어 보겠습니다.
; 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);
?>
비교 검색후 에러 표시는 다음과 같이 처리하면 됩니다.
<?php
$ini_array = parse_ini_file("user.ini", true);
if(!@$var){
echo $ini_array['method']['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];
}
}
}
}
}
$settings = Settings::getInstance('settings.ini');
echo $settings->url;
print_r($settings->Database);
echo $settings->db;
?>
현재 운영중인 서버의 환경정보를 배열로 가져 오겠습니다.
<?php
echo php_ini_loaded_file()
$ini_array = parse_ini_file(php_ini_loaded_file(), true);
print_r($ini_array);
?>