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
コメント