本番のサーバーで、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'のような別名を書いておく方法もあります。
自分のサーバーには入れずに、毎回コマンドに書いています。
同じエラーが出たときの確認ポイント
php -vで、ターミナルのPHPのバージョンを見る- エラー文の
require a PHP versionのあとの数字で、求められているバージョンを見る ls /usr/bin/php*などで、サーバーに入っているPHPを確かめる(エックスサーバーならphp8.3のような名前で入っています)- その名前で
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とは?の記事に書いています。