◀ 8.

the requested PHP extension mbstring is missing from your system 対処

▶

拡張不足はComposerを動かすPHPで確認:未導入・未読込・別PHP・設定上の非表示を区別します。下の旧ログと導入例は記録として保持しています。

実行PHP、Composer設定、lockと全Problemを順に照合し、要件を直した後に再検査する診断フロー

エラー内容

  Problem 1
    - laravel/framework v5.5.9 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
    (候補バージョンの数だけ同じ行が続く)

Composerが見ている環境で要求された拡張を利用できないという意味です。未導入だけでなく、CLIで未読込・別PHPへの導入・config.platformでの非表示も区別します。mbstringの部分は要求によってxml / curl / zip / gd等に変わります。

行が何十行も並ぶ理由や、拡張以外が原因のときの読み方はYour requirements could not be resolved to an installable set of packagesにまとめています。

発生条件/原因

  • composer install / composer create-project の実行時
  • PHP本体と拡張が別パッケージとして提供されている場合。「別売り」は有料という意味ではありません。配布元・PHPの版・ビルドに合う提供方法を確認します。
  • 複数の PHP バージョンが同居していて、Composer が使う CLI の PHP と、拡張を入れた PHP が違う

よく要求される拡張

次表のパッケージ名は旧Debian/Ubuntu系の例です。全OS・全PHP版での提供を保証しません。Composerのext-*は仮想プラットフォーム要件で、composer require ext-mbstringがOS拡張を導入するわけではありません。

拡張 用途 Debian / Ubuntu のパッケージ名
mbstringマルチバイト文字列。対象アプリ/ライブラリの要求を確認php-mbstring
xml / domXML 解析。テストやテンプレートで使われるphp-xml
curlHTTP クライアントphp-curl
zipZIP処理。Composerの展開にはシステムのunzip/7z等を使える場合もあるが、アプリのext-zip要件を代替しないphp-zip
gd / imagick画像処理php-gd / php-imagick
intl国際化(日付・数値の書式)php-intl
bcmath任意精度計算php-bcmath

対処法(Linux)

次の導入例は旧記録で、一括実行しません。先にComposerを実行するPHPを特定し、対象OS・配布元・PHPの版に合う拡張を選びます。汎用のphp-mbstringが別のPHPを選ぶ場合があります。管理者による変更前に対象パッケージと依存変更の予定を確認し、導入後は同じCLIで読込を確認してからlockを再検査します。

sudo apt install php-mbstring
composer install

実行非推奨の旧例:次のsudo apt upgradeは広い範囲の導入済みパッケージを更新し得るため、拡張不足への一律対処にしません。apt updateは索引の更新であり、拡張の導入/読込ではありません。パッケージが見つからない場合は、OS/配布元/有効な提供元とエラーを確認し、索引更新が必要か管理者が判断します。

sudo apt update
sudo apt upgrade

旧記事のsudo dnf install php-mbstringも全RHEL系への共通処方ではありません。採用中の配布元・ストリーム・PHPの版を確認します。macOSも同梱を前提にせず、Homebrew等の実際のPHPバイナリと読込状態を確認します。

導入前に分ける4つの状態

観測次に調べる対象
同じPHPのphp --ri mbstringで情報が出ない未導入か未読込。起動時の警告、主ini/追加ini、配布元のパッケージ/ビルドを確認
phpでは見えるがComposerでは見えないComposerのランチャーが使うPHPとconfig.platformを照合
ブラウザだけ見えるWebとCLIのPHP・SAPI・iniが別でないか確認。Web側の設定をCLIへ丸ごとコピーしない
拡張不足を直しても解決しない全Problemを再読。PHP要件・lock不整合・別拡張/依存競合を個別に確認

WindowsでDLLが必要な構成なら、PHPの版・x86/x64・TS/NTS等のビルド条件とextension_dir・DLLの依存を配布元資料で照合します。適当なDLLをコピーしたり、OSにないaptを代替実行したりしません。コンテナならComposerを動かすステージ/コンテナと実行用の環境をそれぞれ確認し、ホストへの導入でコンテナも直ったと判断しません。

同じCLIとComposer設定を照合する

以下は信頼できる作業コピー内での診断例です。先にUnix系ならcommand -v phpとcommand -v composer、PowerShellならGet-Command php,composer -Allでランチャーも調べます。必要なら確認済みのPHPの絶対パスで、確認済みのcomposer.pharを明示して起動し、同じPHPで各検査を揃えます。表示結果のパス・URL・設定値は共有前に秘密情報を除いてください。

php -v
php --ini
php -m
php --ri mbstring
composer --no-plugins --no-scripts show --platform
composer --no-plugins --no-scripts config --list --source

php --iniでは主iniだけでなく追加読込先も確認します。PHPRC、PHP_INI_SCAN_DIR、起動時の-c/-nで差が出ます。php --ri mbstringが成功しても別のPHPで起動したComposerの証明にはなりません。

config --list --sourceで有効値と由来を確認し、config.platformによるPHP/拡張の上書きやfalseでの非表示を調べます。設定は解決対象を模擬するだけでPHP/拡張を導入しません。エラー回避のために本番にない拡張をあることにせず、意図した配備環境との一致を確認します。

lockがある作業コピーで確認する順番

以下はcomposer.lockがある場合だけの順序です。validateでJSON/lockの整合性、check-platform-reqs --lockで固定依存が要求する実際のCLI環境を確認します。後者はconfig.platformを無視し、vendor未導入でもlockを基準に検査できます。失敗したらそこで止め、環境/変更意図を修正して再確認します。通常の開発依存も対象で、本番でrequire-devを除く配備ならその範囲を決めて--no-devを使います。

composer --no-plugins --no-scripts validate --check-lock
composer --no-plugins --no-scripts check-platform-reqs --lock
composer --no-plugins --no-scripts install --dry-run

dry-runはサンドボックスではありません。--no-plugins --no-scriptsは第三者コードの経路を減らす指定で、任意の不審なプロジェクトを安全にする保証ではありません。通常のComposerコマンドにもプラグインのイベントがあり、--no-scriptsだけではプラグインを止めません。通信やキャッシュの影響も別です。不明なコードは秘密値を持たない隔離環境で扱います。

この確認ではアプリ固有のプラグイン/スクリプトは動かしていないため、本来のビルドや初期化の成功は未検証です。承認された本実行とアプリテストを別に行い、終了コード0やplatform検査だけでWeb/FPM・キュー・本番全体の互換性を保証しません。lock削除、無差別update、全OS更新、要件の無視は診断の代わりになりません。

出典確認:2026年10月26日。Composer公式CLI(install/update・why-not・check-platform-reqs)、config.platform、仮想プラットフォーム依存、第三者コードと隔離の注意、PHP設定ファイル、mbstring導入条件。

入れたのに認識されないとき

下のgrep/whichはUnix系の旧例です。PowerShellではGet-Command php,composer -Allで候補を確認できます。PATHのphpとComposerのランチャーが選ぶphpが同じかも確認します。Webのphpinfoを外部公開して診断しません。

Composer は CLI の PHP を使います。ブラウザ(Web サーバ)側の phpinfo() で拡張が見えていても、CLI 側に入っていなければこのエラーは消えません。

# CLI が読み込んでいる拡張の一覧
php -m | grep mbstring

# CLI が読んでいる php.ini の場所
php --ini

# CLI の PHP のバージョン(複数入っているとここがずれる)
php -v
which php

確認するポイントは次の 3 つです。

  1. php -mに出るか。出なければそのプロセスでは未読込です。パッケージ未導入と断定せず、起動警告・設定探索先・共有ライブラリ不足も確認します。
  2. php --iniの主iniと追加iniを確認。組込み済み拡張ならextension行は不要です。追加iniで既に読み込んでいるのに同じ行を重ねず、配布元の有効化方法に従います。
  3. php -v のバージョンと、入れたパッケージのバージョンが一致するか — php8.1-mbstring を入れたのに CLI が 8.2 なら効きません

CLIにはFPM再起動不要:新しく起動するCLIはその都度設定を読みます。Web側にも変更を反映する場合だけ、実際のFPM/Apache等のサービスと変更手順を別途確認します。旧例のsudo systemctl restart php8.2-fpmをサービス名未確認で実行せず、共有サービスの停止影響・承認も確認します。

関連記事

子ページ

子ページはありません

同階層のページ
  1. Fatal error: Maximum execution time of 30 seconds exceeded in...
  2. Fatal error: Uncaught Error: Cannot use object of type stdClass as array in ...
  3. Warning: Use of undefined constant ... - assumed '...' (this will throw an Error)
  4. ERROR: Call to undefined method Maatwebsite\Excel\Excel::load()
  5. Maximum execution time of 30 seconds exceeded
  6. Your requirements could not be resolved to an installable set of packages. ... To enable extensions, verify that they are enabled in your .ini files:
  7. could not find driver
  8. the requested PHP extension mbstring is missing from your system.
  9. the requested PHP extension dom is missing from your system.
  10. A non well formed numeric value encountered
  11. Warning: Cannot modify header information - headers already sent by ...
  12. php_network_getaddresses: getaddrinfo failed: Name or service not known
  13. XMLWriter::openUri(): Unable to resolve file path
  14. Object of class stdClass could not be converted to string
  15. Class 'Google_Service_Youtube' not found

最近更新/作成されたページ