設定を変更するには
Apache モジュールとして PHP を実行している場合
PHP を Apache モジュールとして使用している場合、Apache 設定ファイル (例、httpd.conf) もしくは .htaccess ファイルにディレクティブを記述することで、PHP の設定の変更を行うことが 可能です。このようにして設定変更を行うには、"AllowOverride Options" もしくは "AllowOverride All" 権限が必要です。
Apache 設定ファイルから PHP の設定を変更するには、
以下に示す Apache ディレクティブを使用します。
各設定オプションの変更の可否 (INI_ALL
,
INI_PERDIR
, または INI_SYSTEM
)
については、付録
php.ini ディレクティブのリスト
を参照ください。
-
php_value
name
value
-
指定した設定オプションに値を設定します。変更の可否が、
INI_ALL
もしくはINI_PERDIR
である設定オプションに対し利用できます。 セット済みの値をクリアしたい場合は、none
を 値として使用してください。注意: 論理値を設定する場合には
php_value
を使用しないでください。代わりに、php_flag
(下記参照)を使用する必要があります。 -
php_flag
name
on|off
-
設定オプションに論理値を設定するために使用します。変更の可否が、
INI_ALL
もしくはINI_PERDIR
である設定オプションで利用できます。 -
php_admin_value
name
value
-
指定した設定オプションに値を設定します。このディレクティブは、.htaccess ファイルでは利用できません。また、
php_admin_value
で設定された設定オプションの値は、.htaccess や ini_set() では上書きできません。 セット済みの値をクリアしたい場合は、none
を値として使用してください。 -
php_admin_flag
name
on|off
-
設定オプションに論理値を設定するために使用します。 このディレクティブは、.htaccess ファイルでは利用できません。 php_admin_value で設定された設定オプションの値は、.htaccess や ini_set() では上書きできません。
例1 Apache 設定の例
<IfModule mod_php5.c> php_value include_path ".:/usr/local/lib/php" php_admin_flag engine on </IfModule> <IfModule mod_php4.c> php_value include_path ".:/usr/local/lib/php" php_admin_flag engine on </IfModule>
PHP 定数は PHP 以外では使用できません。たとえば、
httpd.conf の中で
error_reporting
オプションを設定しようとして E_ALL
や E_NOTICE
のような PHP 定数を使用することは
できません。これらは意味を有さないため、
0 と評価されてしまいます。
代わりに、対応するビットマスク値を使用してください。
php.ini の中では、これらの PHP 定数を使用することができます。
Windows レジストリによる PHP の設定の変更
Windows 上で PHP を実行している場合、Windows レジストリを使用して設定値を
ディレクトリ毎に変更することができます。
設定値は、レジストリキー HKLM\SOFTWARE\PHP\Per Directory Values
に保存され、そのサブキーがパス名となります。例えば、ディレクトリ
c:\inetpub\wwwroot
に対する設定値は、 キー
HKLM\SOFTWARE\PHP\Per Directory Values\c\inetpub\wwwroot
に保存されます。ディレクトリに対する設定は、そのディレクトリ、
およびそのサブディレクトリで実行されるすべてのスクリプトで有効となります。
PHP 設定オプションのディレクティブを名前とする文字列値をキーに登録してください。
また、値のデータに PHP 定数を記述しても解釈されませんので、注意してください。
しかし、INI_USER
で変更可能な設定値はこの方法で設定することが可能ですが、
INI_PERDIR
である設定値は設定できません。
なぜなら、これらの設定値はリクエストがあるたびに読み直されるからです。
他の方法
どのように PHP を実行しているかに係わらず、ini_set() 関数を 用いて、スクリプトの実行時に一部のオプションの設定値を変更することができます。詳細は、 ini_set() 関数のリファレンスを参照ください。
使用しているシステムにおける現在のオプション設定値の完全なリストを得たい場合は、 phpinfo() 関数を実行し、出力された結果を参照ください。 また、ini_get() 関数または get_cfg_var() 関数を用いて、個々のオプションの設定値にアクセスすることも可能です。
User Contributed Notes 2 notes
Being able to put php directives in httpd.conf and have them work on a per-directory or per-vitual host basis is just great. Now there's another aspect which might be worth being aware of:
A php.ini directive put into your apache conf file applies to php when it runs as an apache module (i.e. in a web page), but NOT when it runs as CLI (command-line interface).
Such feature that might be unwanted by an unhappy few, but I guess most will find it useful. As far as I'm concerned, I'm really happy that I can use open_basedir in my httpd.conf file, and it restricts the access of web users and sub-admins of my domain, but it does NOT restrict my own command-line php scripts...
If a directive has beeen set many times in different places, the precedence is as follows in descending order
php-fpm php_*[foo] = bar
command line argument -d foo=bar
environment variable foo=bar and referenced as ${foo} in php.ini
php.ini foo=bar