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をコピーしました!

エンジニアを目指す方必見!おすすめプログラミングスクール

最短でエンジニアになるには、いかに効率よく学習するかが重要です。モチベーションを維持しながら最短でエンジニアを目指すならプログラミングスクールを利用するのもおすすめです。

目次
閉じる