制作ツール

WP-CLIで「Composer detected issues in your platform」。原因はCLIのPHPが8.0だったこと

公開 約4分で読めます

TL;DRこの記事の要点

  • WP-CLIの「Composer detected issues」は、ターミナルのPHP(8.0)がContact Form 7の要件(8.3以上)より古くて出ていた
  • エックスサーバーでは php8.3 /usr/bin/wp のようにPHPを指定すれば動く
  • 既定PHPが変わったのか、プラグインの要件が上がったのかは未確認
目次5項目
  1. 出たエラー
  2. 原因は、コマンドで使うPHPが8.0だったこと
  3. 直し方: PHPを指定してWP-CLIを動かす
  4. 同じエラーが出たときの確認ポイント
  5. まとめ

本番のサーバーで、WP-CLIのコマンドがいきなり動かなくなりました。
出たのは「Composer detected issues in your platform」というエラーです。
先に結論を書くと、止まった原因は、コマンドで使われるPHPが8.0のままで、プラグインがPHP 8.3以上を求めていたことでした。
php8.3 /usr/bin/wpのように、PHPを指定して動かせば通ります。

🎥 この記事の内容は動画でも解説しています。

サイトの表示には何も起きていません。
止まったのは、ターミナルから動かすWP-CLIだけです。
エックスサーバーで同じエラーが出た人向けに、見たことと直し方を残します。

出たエラー

10月8日、本番のエックスサーバーで、カテゴリの一覧を出すwp term listなどを動かしたときのことです。
作業はClaude Codeにやってもらっていて、返ってきたのがこのエラーでした。

PHP Fatal error:  Uncaught RuntimeException: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.3.0". You are running 8.0.30. in .../wp-content/plugins/contact-form-7/vendor/composer/platform_check.php:22

言っていることは、これだけです。
「このプラグインはPHP 8.3以上が必要。でも今動いているのは8.0.30」。
エラーの出どころは、Contact Form 7(お問い合わせフォームのプラグイン)のplatform_check.phpでした。

え、でもサイトは普通に動いてるのに?
となるところですが、理由は次のとおりです。

原因は、コマンドで使うPHPが8.0だったこと

エックスサーバーでは、Webページを表示するときのPHPと、ターミナルでコマンドを動かすときのPHPが別です。
サイトの表示は管理画面で選んだPHP 8.3で動いていました。
一方、ターミナルでphpと打ったときのPHPは、8.0のままでした。

10月22日に、読むだけのコマンドで確かめ直した結果です。

$ php -v
PHP 8.0.30 (cli)

$ php8.3 -v
PHP 8.3.36 (cli)

wpコマンドは、ふだんphp(8.0)で動きます。
WP-CLIはWordPressを読み込むので、有効なプラグインも一緒に読み込まれます。
そこでContact Form 7が「PHPが古い」と止めていた、という流れです。

Contact Form 7の説明ファイル(readme.txt)にも、Requires PHP: 8.3と書かれていました。
本番に入っているのはバージョン6.2.3です。

それまでは、素のwpで動いていました。
なので、どこかのタイミングでプラグインの必要なPHPが上がったか、サーバー側の既定のPHPが変わったか、どちらかだと思います。
どっちが先だったかまでは、確かめられていません。

直し方: PHPを指定してWP-CLIを動かす

エックスサーバーには、バージョンごとのPHPが入っています。
なので、wpの前に使いたいPHPを書けば通ります。

$ php8.3 /usr/bin/wp --version
WP-CLI 2.8.1

$ php8.3 /usr/bin/wp plugin get contact-form-7 --field=version
6.2.3

$ php8.3 /usr/bin/wp option get blogname
Cat's Hand

素のwp option get blognameは同じエラーで止まり、php8.3 /usr/bin/wpを付けると、サイト名(HTMLの文字参照のまま)が返ってきました。
今は、本番でWP-CLIを使うときは毎回この形にしています。

毎回打つのが面倒なら、~/.bashrcにalias wp='php8.3 /usr/bin/wp'のような別名を書いておく方法もあります。
自分のサーバーには入れずに、毎回コマンドに書いています。

同じエラーが出たときの確認ポイント

  1. php -vで、ターミナルのPHPのバージョンを見る
  2. エラー文のrequire a PHP versionのあとの数字で、求められているバージョンを見る
  3. ls /usr/bin/php*などで、サーバーに入っているPHPを確かめる(エックスサーバーならphp8.3のような名前で入っています)
  4. その名前でphp8.3 /usr/bin/wp --versionのように動かしてみる

エラー文に、プラグインのフォルダ名が出ているのもヒントです。
今回ならcontact-form-7。
どのプラグインが止めたのかが、これで分かります。

まとめ

今回の「Composer detected issues in your platform」は、Contact Form 7が求めるPHPより、ターミナルのPHPが古かったために出ていました。
サイトが普通に動いていても、コマンド側のPHPは別、というのがハマりどころでした。
エックスサーバーなら、php8.3 /usr/bin/wpのようにPHPを指定すれば動きます。

WP-CLIそのものの説明は、WP-CLIとは?の記事に書いています。

この記事が参考になったら、応援クリックをお願いします

Cat's Handこの記事を書いた人

Web制作歴10年以上。WordPressのテーマカスタマイズやコーディングを中心に、副業・本業ともにweb制作に携わっています。このブログでは、実際に手を動かして分かったことを書いています。