タイトル: the requested PHP extension mbstring is missing from your system.
SEOタイトル: the requested PHP extension mbstring is missing from your system 対処
エラー内容
Problem 1
- laravel/framework v5.5.9 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
(候補バージョンの数だけ同じ行が続く)
要求された PHP 拡張がインストールされていない、という意味です。mbstring の部分は環境によって xml / curl / zip / gd などに変わります。
行が何十行も並ぶ理由や、拡張以外が原因のときの読み方はYour requirements could not be resolved to an installable set of packagesにまとめています。
発生条件/原因
composer install/composer create-projectの実行時- PHP はインストールされているが、拡張パッケージが別売りになっているディストリビューション(Debian / Ubuntu / RHEL 系はこの形)
- 複数の PHP バージョンが同居していて、Composer が使う CLI の PHP と、拡張を入れた PHP が違う
よく要求される拡張
| 拡張 | 用途 | Debian / Ubuntu のパッケージ名 |
|---|---|---|
mbstring | マルチバイト文字列。日本語を扱うなら実質必須 | php-mbstring |
xml / dom | XML 解析。テストやテンプレートで使われる | php-xml |
curl | HTTP クライアント | php-curl |
zip | Composer がパッケージを展開するのに使う | php-zip |
gd / imagick | 画像処理 | php-gd / php-imagick |
intl | 国際化(日付・数値の書式) | php-intl |
bcmath | 任意精度計算 | php-bcmath |
対処法(Linux)
足りない拡張を入れて、Composer をやり直します。
sudo apt install php-mbstring
composer install
上記で直らない場合、パッケージ一覧が古いことがあります。
sudo apt update
sudo apt upgrade
RHEL / Rocky Linux 系なら sudo dnf install php-mbstring、macOS の Homebrew なら通常 PHP 本体に同梱されています。
入れたのに認識されないとき
Composer は CLI の PHP を使います。ブラウザ(Web サーバ)側の phpinfo() で拡張が見えていても、CLI 側に入っていなければこのエラーは消えません。
# CLI が読み込んでいる拡張の一覧
php -m | grep mbstring
# CLI が読んでいる php.ini の場所
php --ini
# CLI の PHP のバージョン(複数入っているとここがずれる)
php -v
which php
確認するポイントは次の 3 つです。
php -mに出るか — 出なければ CLI 側に入っていませんphp --iniが指す ini にextension=mbstringがあるか — CLI と FPM で ini が別なのはよくありますphp -vのバージョンと、入れたパッケージのバージョンが一致するか —php8.1-mbstringを入れたのに CLI が 8.2 なら効きません
PHP-FPM を使っている場合、拡張を入れた後は sudo systemctl restart php8.2-fpm で再起動が要ります(Composer だけなら再起動は不要です)。
関連記事
- Your requirements could not be resolved to an installable set of packages — 依存解決に失敗したときの読み方
- PHP — 言語のカテゴリ