EC2でPHPのmbstringが使えない

Laravel8でメール送信しようとしたら以下のエラーが出ました。

Call to undefined function mb_strcut()

Laravelではメール送信時にmbstringを使っていますが、phpのmbstringを入れていないのが原因でこのようなエラーが出ていました。

この記事ではEC2にmbstringをインストールする方法をご紹介します。

phpのmbstringを入れていないのが原因なので、まずはphp-mbstringをインストールします。

$ sudo yum install php-mbstring
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                               | 3.7 kB     00:00     
265 packages excluded due to repository priority protections
依存性の解決をしています
...

インストール:
  php-mbstring.x86_64 0:8.0.8-1.amzn2                                           

依存性関連をインストールしました:
  oniguruma.x86_64 0:5.9.6-1.amzn2.0.4                                          

完了しました!

次にphp.iniを設定します。

php.iniは通常/etcにあります。
以下のコマンドで/etcにphp.iniがあるか確認できます。

$ ls /etc/ | grep php
php-fpm.conf
php-fpm.d
php-zts.d
php.d
php.ini

以下のコマンドのようにvimでphp.iniを開きます。

$ sudo vim /etc/php.ini

以下の部分がコメントアウトしてあるので、セミコロン(;)を削除・編集して保存します。

;使用される言語設定
;mbstring.language = Japanese
↓
mbstring.language = Japanese

;内部文字コードの設定
;mbstring.internal_encoding = 
↓
mbstring.internal_encoding = UTF-8

;HTTP入力の「全自動」エンコーディング変換
;mbstring.http_input =
↓
mbstring.http_input = auto

;HTTP出力の「全自動」エンコーディング変換
;mbstring.http_output = 
↓
mbstring.http_output = UTF-8

;内部文字エンコーディングへの変換
;mbstring.encoding_translation = OFF
↓
mbstring.encoding_translation = On

; UTF-8,EUC-JP,SJIS などの文字コード検出順位
;mbstring.detect_order =
↓
mbstring.detect_order = auto

vimでは以下の画像のように/hogeで文字検索をすることができます。

最後にphp-fpmを再起動するとmbstringが使えるようになるので、laravelでメールを送信することができます。

$ sudo systemctl restart php-fpm

もし日本語が文字化けする場合はシステムの文字コードと合っていません。
mbstring.internal_encodingをシステムの文字コードと合わせるか、以下のようにmbstring.encoding_translationをOffにしてください。


;内部文字エンコーディングへの変換
;mbstring.encoding_translation = On
↓
mbstring.encoding_translation = Off
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

目次