経理からエンジニア転向した人のメモ

元経理マンがエンジニアに転向して現在

CentOS7にphp7を入れてmbstringあれこれのエラー

環境

経緯

vagrantCentOS/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時間くらいかかった。笑