php.iniの設定をPHPスクリプト内で変更する方法。
PHPスクリプトの可搬性を高めるために、php.iniの設定にできるだけ依存しないようにしたい。
###設定可能な項目
「.htaccess」ファイルで設定出来る項目は、PHPマニュアル(php.ini ディレクティブ)において
「変更の可否」が「PHP_INI_USER」または「PHP_INI_ALL」と指定されているものです。
####.htaccessで変更できる項目を調べるスクリプト
<?php
print_r('ini_set()で変えてしまえる設定は:<br>');
foreach (ini_get_all() as $name => $value) {
if ($value['access'] & 1) {
print_r($name . '<br>');
}
}
?>
参考:ini_set()でどの設定を変えることが出来るか調べる
###ini_set
設定は、ini_set()で行います。
ini_set()は、成功した場合は変更前の値を、失敗した場合にFALSEを返します。
設定は、関連する関数を使用する前に行う必要があります。
たとえば、「session.use_trans_sid」は、session_start()を使用する前に設定します。
###ini_get
現在の設定を取得するには、ini_get()を使用します。
また、ini_get_all()を使用すると、すべての項目の設定を取得できます。
###オープンソースソフトウェアの設定
オープンソースソフトウェアではどのように設定しているか調べてみました。
mbstring.http_input、mbstring.http_outputを「pass」に変更しています。
文字化け対策として無難な設定だと思います。
init.php
mb_language(MB_LANGUAGE);
mb_internal_encoding(SOURCE_ENCODING);
ini_set('mbstring.http_input', 'pass');
mb_http_output('pass');
mb_detect_order('auto');
####XOOPS Cube V2.1
Legacy_LanguageManager.class.php
ini_set( 'mbstring.http_input', 'pass');
ini_set( 'mbstring.http_output', 'pass');
ini_set( 'mbstring.func_overload', 0);
ini_set( 'mbstring.substitute_character', 'none');
####OpenPNE 1.8.2
config.phpで設定。
mbstring.http_inputが「auto」です。
mb_language('Japanese');
ini_set('mbstring.detect_order', 'auto');
ini_set('mbstring.http_input' , 'auto');
ini_set('mbstring.http_output' , 'pass');
ini_set('mbstring.internal_encoding', 'UTF-8');
ini_set('mbstring.script_encoding' , 'UTF-8');
ini_set('mbstring.substitute_character', 'none');
mb_regex_encoding('UTF-8');