phpの設定を変えたいけど、使用するレンタルサーバでphp.iniがいじれないというときの、対処法。
phpの設定ができる場所。
phpの設定はphp.iniでするもんだと思ってたが、いろんなところで設定できる。
phpの設定ができる場所は以下のとおり。
設定できる箇所:
– php.ini、httpd.conf
– 上記に加え、.htacess、.user.ini
– .user.ini、ini_set()関数、Windowsのレジストリ
– どこからでも指定可能
表にすると、以下の感じ
モード | php.ini | httpd.conf | .htaccess | .user.ini | ini_set() | Windowsのレジストリ |
---|---|---|---|---|---|---|
PHP_INI_SYSTEM | o | o | – | – | – | – |
PHP_INI_PERDIR | o | o | o | o | – | – |
PHP_INI_USER | – | – | – | o | o | o |
PHP_INI_ALL | o | o | o | o | o | o |
どのPHP設定がどこから設定可能か?
ここからディレクティブを探して、
上記の表と照らし合わせるとわかる。
たとえば、
「short_open_tag」設定については、
「PHP_INI_PERDIR」となっているので、
- php.ini
- httpd.conf
- .htaccess
- .user.ini
からの設定が可能。
.htaccess にphpの設定できるのは、module版PHPのみ。
.htaccess にphpの設定ができるのは、基本的にはモジュール版のPHPのみ。
(PHP_VALUE環境変数で設定できるみたいだけど、あんまスマートじゃなさそう)(R]
使用しているPHPが、モジュール版か、CGI版(php-fpmなど)版か
使用しているPHPが、モジュール版か、CGI版(php-fpmなど)版か確認するには、
phpinfo()で確認して、
Server APIの部分が、「Apache 2.0 Handlerならmodule版
「CGI/FastCGI」ならCGI版です。
.user.ini ファイルについて
ディレクトリ単位でのPHP設定が可能。
サイト全体に効かせたい場合は、WebサーバのDocumentRoot直下に設置する。
/.user.ini
書き方はphp.iniと同じで、例えば「」で開始したり「=文字列?>」のような「ショートタグ」を有効にしたい場合は、
short_open_tag = On
と記述する。
.user.ini ファイルは反映に時間がかかる。
.user.ini ファイルの注意点として、
反映までに時間がかかる
。
デフォルトは300秒(=5分)に設定されてるが、phpinfo()などで対象サーバが反映まで何分待ちかがわかる。
user_ini.cache_ttl
の値がそれ。300になってたら、300秒待ち。
サービスを再起動すれば即反映される。
コメント