PHP 8 で、
mbstring
を有効にするとmbstring.internal_encoding is deprecated
と表示される。$ docker run --rm -it keinos/php8-jit /bin/sh / $ php -v PHP Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0 Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0 PHP 8.0.0-dev (cli) (built: May 21 2020 15:58:54) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies with Zend OPcache v8.0.0-dev, Copyright (c), by Zend Technologies
TL; DR (今北産業)
-
mbstring.internal_encoding
は PHP 8.0.0 から削除されました。 -
php.ini
を修正して回避します。-
mbstring.internal_encoding
を設定しているphp.ini
ファイルを探し、mbstring.internal_encoding
の項目を削除(or;
でコメントアウト)します。
-
-
具体的な修正箇所は以下のとおり:
/usr/local/etc/php/conf.d/docker-php-enable-mb.ini; Extended PHP.ini file to enable mbstring. ; ========================================= ; Place this file under /usr/local/etc/php/conf.d/ zend.multibyte = On zend.script_encoding = UTF-8 mbstring.language = Japanese - mbstring.internal_encoding = UTF-8 + ;mbstring.internal_encoding = UTF-8
TS; DR
2020 年の 6 月ごろの話しです。JIT を有効にした PHP8-dev の Docker イメージで遊んでいました。
すると、ある時から PHP Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated
エラーが出るようになりました。
「mbstring.internal_encoding
は廃止になりました」とのこと。調べてみたら、もともと php.ini
の mbstring.internal_encoding
設定は PHP 5.6.0 以降から非推奨でした。
どうやら、master
ブランチ(PHP 8.0.0-dev)のコミット 3ca08ee(2020/03/31)で削除され Deprecated
となり、このまま差し戻されなければ PHP 8.0.0 の正式リリースで削除されますました。
おそらく、mbstring.internal_encoding
以外の非推奨設定も PHP 8.0.0 を機に削除されるかもしれません。
2021/03/24 現在、非推奨とされる mbstring
の設定項目。
名前 | 変更履歴 | 変更予定 |
---|---|---|
mbstring.http_input | PHP 5.6.0 で非推奨 | |
mbstring.http_output | PHP 5.6.0 で非推奨 | |
mbstring.internal_encoding | PHP 5.6.0 で非推奨 | PHP 8.0.0 以降で削除予定(3ca08eeでは削除済み) |
mbstring.func_overload | PHP 7.2.0 で非推奨 | PHP 8.0.0 で削除されました。 |
2020/06/23 に PHP8-alpha1 がリリースされたので、いよいよリリース間近。たのしみです。