🐘
PHP 8.x での php.ini の設定について
はじめに
ようやく PHP 8.x 環境に触れることとなり、環境設定のため久しぶりに php.ini ファイルを眺めてみました。
5.x の頃の設定
あちこち変更していたということもなく、以下の二つのセクションに手を入れていたくらいでした。
-
Date
php.inidate.timezone = Asia/Tokyo
-
mbstring
php.inimbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off mbstring.detect_order = ASCII,ISO-2022-JP,UTF-8,eucJP-win,SJIS-win mbstring.substitute_character = none mbstring.func_overload = 0
8.x の設定
概ねこれまで通りで良さそうなんですが、幾つか気になるものがあります。
php.ini のコメントを見ると以下の三つは deprecated になっていますね(たぶんずっと前から)。
-
mbstring.internal_encoding
代わりにグローバルのinternal_encoding
を使うべし。 -
mbstring.http_input
代わりにグローバルのinput_encoding
を使うべし。 -
mbstring.http_output
代わりにグローバルのoutput_encoding
を使うべし。
グローバルというのは PHP
セクションのことかな?
-
PHP
-
internal_encoding
未設定であればdefault_charset
が設定される。
default_charset
はデフォルトでUTF-8
になっているので、これは未設定のままとします。
サイトにも 記載 がありました。 -
input_encoding
internal_encoding
と同様。 -
output_encoding
internal_encoding
と同様。
-
console
# php -r 'var_export(mb_internal_encoding());'
'UTF-8'
# php -r 'var_export(mb_http_input("L"));'
'UTF-8'
# php -r 'var_export(mb_http_output());'
'UTF-8'
ちょっと試してみましたが問題なさそう。
残りは mbstring.detect_order
。
mbstring.language
の設定によって変わるとのことなので試してみます。
- 未設定の場合console
# php -r 'var_export(mb_detect_order());' array ( 0 => 'ASCII', 1 => 'UTF-8', )
-
Japanese
の場合console# php -d mbstring.language=Japanese -r 'var_export(mb_detect_order ());' array ( 0 => 'ASCII', 1 => 'JIS', 2 => 'UTF-8', 3 => 'EUC-JP', 4 => 'SJIS', )
検知の順序としては良いが eucJP-win
,SJIS-win
ではなく EUC-JP
,SJIS
になっている。
残念だけど、これは手動で設定するしかなさそう。
ということで、最終的には以下を設定します。
-
Date
php.inidate.timezone = Asia/Tokyo
-
mbstring
php.inimbstring.language = Japanese mbstring.detect_order = ASCII,ISO-2022-JP,UTF-8,eucJP-win,SJIS-win mbstring.substitute_character = none mbstring.func_overload = 0
おわりに
php.ini ファイル、意外とあまり変わっていませんでした。
これまでと同様の感じで利用できそうです。
Discussion
mbstring.func_overload
ディレクティブに関してですが、8.0.0以降で削除されているようです。