CentOS7にphp7を入れてmbstringあれこれのエラー
環境
- macOS High Sieera
- Vagrant (2.1.2)
- VirtualBox (5.2.16)
経緯
・vagrantのCentOS/7環境
・yumでremiさんのレポジトリからphp7が入れてある
・ドットインストールでphpを勉強中。(とりあえずビルトインサーバーを使用。 $ php -S 192.168.XX.XX:XXXX
コマンド )
・mb_strlen()関数が使えない(エラーログのコピー忘れた。。。)
やったこと
ここまで来るのにいろいろやったけど、結局これ一発で終わった(ってしまった)。
# yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd
他に色々いれちゃったけど、php-mbstring
これ。(remiレポジトリからとってくるのが重要かな?多分。それか他のやつ)
普通にyum install php-mbstring
でもできなかったので。
調べるにあたって便利なコマンド
$ rpm -qa | grep php php-devel-7.0.31-1.el7.remi.x86_64 php-mbstring-7.0.31-1.el7.remi.x86_64 php-common-7.0.31-1.el7.remi.x86_64 php-cli-7.0.31-1.el7.remi.x86_64 php-gd-7.0.31-1.el7.remi.x86_64 php-pdo-7.0.31-1.el7.remi.x86_64 php-json-7.0.31-1.el7.remi.x86_64 php-7.0.31-1.el7.remi.x86_64
コケたとこ
・とりあえず、yum install php-mbstring
→ 動かない → 原因 : installだけでは不十分。
・下記リンクを参考にphp.iniをいじる。 → 動かない → 原因 : これ多分win用
日本語利用の為の設定(mbstring) | PHPインストールと初期設定
・CentOS用の記事を見つけてphp.iniをいじる。→ できない。 → yumのログを見てみる。
日本語環境の設定 - mbstring - php.iniの設定 - PHP入門のカルマ
・ログを見返す。→ そもそもinstallできていなかった。
・CentOS7の記事を参考にinstallできていない原因を探す。 → php-commonをuninstallと書いてあったので実行。
→ phpのパス消える。(php-mbstringをinstallはできた。5.4?6?だけど)
unix - centOS 7 Can't install php-mbstring extension - Stack Overflow
・ムカついたので最初からphpをinstallし直す。
→できた。
CentOS7にPHP7をyumでインストールする
総括
結局再インストールしただけで根本的な解決にはならなかった。(php-commonのuninstallで消えちゃったため。) しかしyum,レポジトリに関する知識があったので、バージョンについても少し理解しながらできた。 「yum install epel-release」や「--enablerepo=remi」の意味,本当に理解して使ってますか? - akamist blog
とりあえずできるようになったからよしとする。 commonをuninstallした影響がわからないけど、あまり読めもしない英語の記事でuninstall関係でてきたときは慎重にいこう。。。
結局、php.iniも確認したら初期設定ぽいので。
/etc/php.ini
[mbstring] ; language for internal character representation. ; This affects mb_send_mail() and mbstring.detect_order. ; http://php.net/mbstring.language ;mbstring.language = Japanese ; Use of this INI entry is deprecated, use global internal_encoding instead. ; internal/script encoding. ; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*) ; If empty, default_charset or internal_encoding or iconv.internal_encoding is used. ; The precedence is: default_charset < internal_encoding < iconv.internal_encoding ;mbstring.internal_encoding = ; Use of this INI entry is deprecated, use global input_encoding instead. ; http input encoding. ; mbstring.encoding_traslation = On is needed to use this setting. ; If empty, default_charset or input_encoding or mbstring.input is used. ; The precedence is: default_charset < intput_encoding < mbsting.http_input ; http://php.net/mbstring.http-input ;mbstring.http_input = ; Use of this INI entry is deprecated, use global output_encoding instead. ; http output encoding. ; mb_output_handler must be registered as output buffer to function. ; If empty, default_charset or output_encoding or mbstring.http_output is used. ; The precedence is: default_charset < output_encoding < mbstring.http_output ; To use an output encoding conversion, mbstring's output handler must be set ; otherwise output encoding conversion cannot be performed. ; http://php.net/mbstring.http-output ;mbstring.http_output = ; enable automatic encoding translation according to ; mbstring.internal_encoding setting. Input chars are ; converted to internal encoding by setting this to On. ; Note: Do _not_ use automatic encoding translation for ; portable libs/applications. ; http://php.net/mbstring.encoding-translation ;mbstring.encoding_translation = Off ; automatic encoding detection order. ; "auto" detect order is changed according to mbstring.language ; http://php.net/mbstring.detect-order ;mbstring.detect_order = auto ; substitute_character used when character cannot be converted ; one from another ; http://php.net/mbstring.substitute-character ;mbstring.substitute_character = none ; overload(replace) single byte functions by mbstring functions. ; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), ; etc. Possible values are 0,1,2,4 or combination of them. ; For example, 7 for overload everything. ; 0: No overload ; 1: Overload mail() function ; 2: Overload str*() functions ; 4: Overload ereg*() functions ; http://php.net/mbstring.func-overload ; enable strict encoding detection. ; Default: Off ;mbstring.strict_detection = On ; This directive specifies the regex pattern of content types for which mb_output_handler() ; is activated. ; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml) ;mbstring.http_output_conv_mimetype=
コード
$s1 = "ねこ"; echo mb_strlen($s1); // 2
表示
2
この「2」を表示させるためだけに1時間くらいかかった。笑