php.iniの設定をPHPスクリプト内で変更する

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」に変更しています。
文字化け対策として無難な設定だと思います。

####PukiWiki 1.4.7 UTF8版

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');

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です