Cloud9でのマルチバイト対応についてメモ書きです。
現象
$pos = mb_strpos($name, $_POST['keywd']);
といった行で
Call to undefined function mb_strpos() in…というエラーになる。
この場合、php-mbstringがインストールされていない。
対応策
1. phpのバージョン確認
php -v
2. yumでインストール可能なmbstringを表示する
#yum list | grep mbstring
3. 1.で確認したPHPのバージョンと同じものをインストールする
sudo yum -y install php56-mbstring.x86_64
4. php.iniの編集
vi /etc/php.ini
php.iniの[mbstring]を下のように修正する。
[mbstring]
; language for internal character representation.
; This affects mb_send_mail() and mbstrig.detect_order.
; https://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 = utf-8
; 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
; https://php.net/mbstring.http-input
mbstring.http_input = auto
; 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.
; https://php.net/mbstring.http-output
mbstring.http_output = utf-8
; 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.
; https://php.net/mbstring.encoding-translation
mbstring.encoding_translation = On
; automatic encoding detection order.
; "auto" detect order is changed according to mbstring.language
; https://php.net/mbstring.detect-order
mbstring.detect_order = auto
もし書き込み権限のないユーザでファイルを編集してしまった場合、Can’t open file writing というエラーが出る
その場合は下記のコマンドでOK
:w !sudo tee %
5. apacheを再起動する
sudo service httpd restart