[ PHP ] php.ini ファイルの値の取得と更新 ( ini_get / ini_set )

Pocket

ここでは、php.ini ファイルに設定してある内容の取得と設定を行うサンプルコードを掲載しています。

スポンサーリンク

php.ini ファイルの設定内容の取得

php.ini ファイルに設定されている値の取得には ini_get 関数を使用します。ただし、後述する ini_set 関数によって値が上書きされている場合には、php.ini ファイルに 設定してある内容ではなく、上書きした内容が取得されます。

var_dump(ini_get('display_errors'));
var_dump(ini_get('date.timezone'));

// 表示結果
//-------------------------------
// '1'
// 'Asia/Tokyo'

php.ini ファイルの設定値を更新する

スクリプト内で php.ini に登録されている値を上書きするには ini_set 関数を使用します。詳細はコメントを参照ください。

ini_set('date.timezone' , 'test/test');
var_dump(ini_get('date.timezone'));

// 表示結果
//---------------------------------------------
// test/test

// date.timezone では無効な値でも設定可能だが、設定値の妥当性を
// 検証する項目も存在する。下記にサンプルを示す

// NG:'false' が返される。
var_dump(ini_set('mbstring.http_input', '0'));     

// OK:'pass' が返される。
var_dump(ini_set('mbstring.http_input', 'pass'));  

// ※ 後述するように PHP_INI_* モード(アクセスレベル)によって上書きできない項目も存在する。

php.ini の設定値とスクリプトで上書きした値を取得

php.ini のデフォルト設定値とスクリプトから上書きした値とアクセスレベルを一括で取得するには ini_get_all 関数を使用します。

// date 拡張設定の一覧を取得する
// すべての設定内容を取得するには、ini_get_all() とする。
$options = ini_get_all('date');

echo 'key : global_value, local_value, access\n';
echo '--------------------------------------------\n';
foreach($options as $key => $value) {
    echo $key . ":" . $value['global_value'] . ', ' . $value['local_value'] . ', ' . $value['access'] . '\n';
}

// スクリプトでデフォルト設定を更新する
ini_set('date.timezone' , 'test/test');

$options = ini_get_all('date');

echo 'key : global_value, local_value, access\n';
echo '--------------------------------------------\n';
foreach($options as $key => $value) {
    echo $key . ":" . $value['global_value'] . ', ' . $value['local_value'] . ', ' . $value['access'] . '\n';
}

// 表示結果例
//---------------------------------------------
//
// key : global_value, local_value, access
//--------------------------------------------
// date.default_latitude:31.7667, 31.7667, 7
// date.default_longitude:35.2333, 35.2333, 7
// date.sunrise_zenith:90.583333, 90.583333, 7
// date.sunset_zenith:90.583333, 90.583333, 7
// date.timezone:Asia/Tokyo, Asia/Tokyo, 7

// key : global_value, local_value, access
//--------------------------------------------
// date.default_latitude:31.7667, 31.7667, 7
// date.default_longitude:35.2333, 35.2333, 7
// date.sunrise_zenith:90.583333, 90.583333, 7
// date.sunset_zenith:90.583333, 90.583333, 7
// date.timezone:Asia/Tokyo, test/test, 7

ini_set 関数と PHP_INI_* モード(アクセスレベル)

php_set 関数で上書き可能な値は、アクセスレベルが PHP_INI_USER ( 1 ) および PHP_INI_ALL ( 7 ) です。 PHP_INI_PERDIR ( 6 ) および PHP_INI_SYSTEM ( 4 )  のものは更新できません。エラーが発生します。

// NG:PHP_INI_SYSTEM(4) のため false リターン
var_dump(ini_set('mbstring.func_overload', '0'));

// NG:PHP_INI_PERDIR(6) のため false リターン
var_dump(ini_set('mbstring.encoding_translation', '0'));

// OK:PHP_INI_ALL(7) のため、設定可能('pass' がリターンされる)
var_dump(ini_set('mbstring.http_input', 'pass'));
参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *