🐘

PHP 8.x での php.ini の設定について

2021/05/04に公開1

はじめに

ようやく PHP 8.x 環境に触れることとなり、環境設定のため久しぶりに php.ini ファイルを眺めてみました。

5.x の頃の設定

あちこち変更していたということもなく、以下の二つのセクションに手を入れていたくらいでした。

  • Date
    php.ini
    date.timezone = Asia/Tokyo
    
  • mbstring
    php.ini
    mbstring.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.ini
    date.timezone = Asia/Tokyo
    
  • mbstring
    php.ini
    mbstring.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