アイコン エンジニア婦人ノート | PHPなどのプログラミングをするときの困った!を助ける情報サイト

【php-fpm】Composer detected issues in your platform - CLI と php-fpm の PHP バージョン違い

2026/2/12 16:26

開発環境にシステムを入れて composer update も終わり、サイトにアクセスしたところ、次のエラーが発生しました。

Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.4.0".

PHP8.4でないと認めない!と言われているのですが…あれ、この環境はPHP8.xだったと思うんだけど…というところでハマりました。

  1. CLI の PHP バージョンと php-fpm のバージョンが違っていた
  2. Composer は CLI の PHP バージョンを基準に依存関係を解決する
  3. composer.json の PHP バージョン指定と実行環境が一致していなかった
PR

バージョンの確認

まずは php -v

8.4でした。…エラーメッセージで「8.4以上でないと認めない」と言っているのに、どうしてだろう?

php-fpm環境が8.3でした

開発環境はいろいろあるのでphp-fpmで任意のPHPバージョンを使えるようにしています。

今回はこれが原因でした。php-fpmで8.3指定なのに、8.4のcomposerで入れてしまっている。

  1. CLI の PHP は 8.4
  2. php-fpm は 8.3
  3. Composer は CLI の PHP(8.4)を基準に依存関係を解決していた

そのため、PHP8.4 前提の依存関係が composer.lock に固定され、php-fpm(8.3)で実行するとエラーになっていました。

PHP のメジャーバージョンは同じ 8.x でも、Composer は依存関係の解決時に PHP のバージョンを厳密に見ているため、このようなズレでもエラーになるようです。

PHP8.3で動作するようにcomposer.jsonを修正

今回は php-fpm が 8.3 のため、PHP8.3 で動作する構成に合わせます。

  1. composer.jsonを修正
  2. composer.lockとvendorディレクトリを削除
  3. PHPバージョンを指定してcomposer update

composer.jsonのPHPバージョン指定を修正

確認したら「"php": "^8.0"」となっていました。

PHP8であればマイナーバージョンまで気にしなくてもよさそうだったので、ここでは「PHP8.3以上」に修正します。

"require": {
    "php": ">=8.3"
}

PHP のマイナーバージョン違いで毎回修正が必要にならないように8.3以上としました。

composer.lockとvendorを削除

composer.jsonを修正してもlockがあるとcomposer.jsonがあってもlockを優先して失敗するので、削除します。

vendorもあれば削除しておきます。

rm composer.lock
rm -rf vendor

PHPバージョンを指定してcomposer update

ここまでできたら composer update をします。

ですが、そのままcomposer updateコマンドを入れるとまたCLIのバージョン(ここでは8.4)で依存関係を解決してしまうので、PHPのバージョンを指定してから実行します。

※composerが指定のPHPバージョンと紐づいていないときは which composer でパスを探してください。

which composer
php8.3 /usr/bin/composer update

これでcomposerが想定通りに入り、無事にサイトにアクセスできるようになりました。

まとめ

php-fpm を使っている場合、`php -v` で表示される CLI の PHP と別のバージョンが使われていることがあります。

Composer でPHPのバージョン違いのエラーが出たときはCLI と php-fpm の両方の PHP バージョンを確認すると、解決の糸口が見つかるかもしれません。

関連記事