神戸のホームページ制作会社ユニファース 代表ブログ

XserverのWP-CLIでエラーが出る場合の対処法|PHP 8.3+最新版WP-CLIをユーザー領域に導入する

XserverへSSH接続し、WordPressをWP-CLIで操作しようとしたところ、PHPのバージョンやXserver標準のWP-CLIが原因で正常に動作しない問題が発生しました。

最終的には、Xserver標準の /usr/bin/wp を変更するのではなく、

PHP 8.3
+
自分のホームディレクトリにインストールしたWP-CLI

という構成にすることで解決できました。

この記事では、その手順をステップバイステップでまとめます。


今回の環境

今回確認したXserver環境は以下です。

OS: Linux
Shell: /bin/bash
PHP: 8.3.30
MariaDB: 10.5.17

当初、Xserverに入っていたWP-CLIをPHP 8.3で実行すると、

WP-CLI version: 2.4.0

でした。

実際の wp cli info でも、WP-CLI 2.4.0であることを確認できました。


1. Xserver標準のWP-CLIで発生した問題

最初は通常どおり、

wp

を使用していました。

しかし、WordPressの処理を実行するとPHP関連のエラーが発生しました。

そこでPHP 8.3を明示してWP-CLIを実行すると、WordPress自体は動くようになりました。

例えば、

/usr/bin/php8.3 /usr/bin/wp core version

という形です。

ところが今度は、WP-CLIから大量の Deprecated 警告が表示されました。

例:

PHP Deprecated:
Creation of dynamic property
WP_CLI\Dispatcher\CompositeCommand::$longdesc is deprecated
PHP Deprecated:
Creation of dynamic property
WP_CLI\Dispatcher\Subcommand::$longdesc is deprecated

実際に何百行ものDeprecatedメッセージが出力されました。

つまり、

PHP 8.3ではWordPressを動かせる
↓
しかしXserver側のWP-CLIが古い
↓
PHP 8.3で大量のDeprecated警告が出る

という状態でした。


2. まず現在のWP-CLIを確認する

以下を実行します。

wp cli info

確認したいのは主に、

PHP binary
PHP version
WP_CLI phar path
WP-CLI version

です。

また、

which wp

または、

command -v wp

でも実体を確認できます。

Xserver標準のWP-CLIの場合、

/usr/bin/wp

が返ってくることがあります。


3. PHP 8.3を直接指定してみる

Xserverでは今回、

/usr/bin/php8.3

を利用できました。

確認します。

/usr/bin/php8.3 -v

WP-CLIをPHP 8.3で直接実行する場合は、

/usr/bin/php8.3 /usr/bin/wp cli info

とします。

これは一時的な確認方法としては有効です。

ただし、毎回、

/usr/bin/php8.3 /usr/bin/wp

と入力するのは面倒です。

さらに今回の環境では、標準WP-CLIが古かったため、PHP 8.3を使うとDeprecated警告が大量に表示されました。

そこで、WP-CLI自体も新しいものへ変更します。


4. Xserver標準のWP-CLIは変更しない

ここが重要です。

Xserverにある、

/usr/bin/wp

を直接上書きしたり削除したりする必要はありません。

共有サーバーなので、システム側のWP-CLIではなく、

/home/ユーザー名/bin/

に自分専用のWP-CLIを配置します。

今回なら、

/home/wp144924/bin/

です。


5. ~/bin を作成する

SSHで以下を実行します。

mkdir -p "$HOME/bin"

~$HOME は、現在ログインしているユーザーのホームディレクトリです。

今回なら、

/home/wp144924

なので、

/home/wp144924/bin

が作成されます。


6. 新しいWP-CLIをダウンロードする

WP-CLIのPHARファイルを、自分の bin ディレクトリへ配置します。

curl -L https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
  -o "$HOME/bin/wp-cli.phar"

ダウンロード後、PHP 8.3で直接確認します。

/usr/bin/php8.3 "$HOME/bin/wp-cli.phar" --info

今回導入したものは、

WP-CLI version: 2.12.0

でした。


7. wp と入力するだけでPHP 8.3を使うようにする

毎回、

/usr/bin/php8.3 "$HOME/bin/wp-cli.phar"

と入力するのは面倒なので、ラッパースクリプトを作成します。

cat > "$HOME/bin/wp" <<'EOF'
#!/bin/bash
exec /usr/bin/php8.3 "$HOME/bin/wp-cli.phar" "$@"
EOF

実行権限を付けます。

chmod 700 "$HOME/bin/wp"

WP-CLI本体にも権限を設定しておきます。

chmod 600 "$HOME/bin/wp-cli.phar"

これで、

~/bin/wp

を実行すると、

PHP 8.3
↓
~/bin/wp-cli.phar

という順番で実行されます。


8. ~/bin/usr/bin より優先する

ここも重要です。

Linuxでは PATH の左側から順番にコマンドを探します。

そのため、

/usr/bin

より、

$HOME/bin

を先にする必要があります。

.bash_profile に以下を設定します。

export PATH="$HOME/bin:$PATH"

注意したいのが、以下です。

PATH=$PATH:$HOME/bin

この書き方では、$HOME/bin が最後に追加されます。

その場合、

/usr/bin/wp

が先に見つかる可能性があります。

今回の目的では、

export PATH="$HOME/bin:$PATH"

とし、$HOME/bin を先頭に置きます。


9. Xserverにnanoがない場合

今回のXserver環境では、

nano ~/.bash_profile

を実行すると、

-bash: nano: コマンドが見つかりません

となりました。

その場合は、

vi ~/.bash_profile

を使うこともできます。

ただし、viに慣れていない場合は、コマンドだけで設定する方が簡単です。

例えば、

echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bash_profile

とします。


10. PATHの重複に注意する

設定後、

type -a wp

を実行します。

正常なら、

wp は /home/wp144924/bin/wp です
wp は /usr/bin/wp です

のようになります。

これは問題ありません。

1行目の、

/home/wp144924/bin/wp

が実際に使用されます。

2行目の、

/usr/bin/wp

はXserver標準のWP-CLIです。

削除する必要はありません。


同じ ~/bin/wp が何度も表示される場合

例えば、

wp は /home/wp144924/bin/wp です
wp は /usr/bin/wp です
wp は /home/wp144924/bin/wp です
wp は /home/wp144924/bin/wp です

となる場合があります。

これは $PATH に、

/home/wp144924/bin

が複数回入っている可能性があります。

確認します。

echo "$PATH" | tr ':' '\n'

さらに、

grep -n 'HOME/bin' ~/.bash_profile ~/.bashrc 2>/dev/null

でも確認できます。

今回、

PATH=$PATH:$HOME/bin

と、

export PATH="$HOME/bin:$PATH"

の両方が存在していました。

さらに入力ミスで、

export PATHexport PATH="$HOME/bin:$PATH"

となっている行もありました。

不要な行を削除し、

export PATH="$HOME/bin:$PATH"

だけを残します。


11. .bash_profile をコマンドだけで修正する方法

バックアップを取ります。

cp ~/.bash_profile ~/.bash_profile.bak

HOME/bin を含む既存行を削除します。

sed -i '/HOME\/bin/d' ~/.bash_profile

正しい設定を追加します。

echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bash_profile

その後、一度SSHからログアウトして再接続します。


12. 最終確認

SSHへ再接続後、

command -v wp

を実行します。

以下ならOKです。

/home/wp144924/bin/wp

続いて、

wp cli info

を実行します。

今回の最終状態は以下になりました。

PHP binary:     /opt/php-8.3.30/bin/php
PHP version:    8.3.30

MySQL binary:   /usr/bin/mariadb
MySQL version:  MariaDB 10.5.17

WP_CLI phar path:
phar:///home/wp144924/bin/wp-cli.phar

WP-CLI version: 2.12.0

つまり、

wp
↓
~/bin/wp
↓
PHP 8.3
↓
~/bin/wp-cli.phar
↓
WP-CLI 2.12.0

という構成になりました。


13. Deprecated警告も消えた

Xserver標準のWP-CLIをPHP 8.3で動かしたときは、

PHP Deprecated:

が大量に表示されていました。

しかし、新しいWP-CLIへ切り替えた後は、

wp cli info

を実行してもDeprecated警告は表示されなくなりました。

そのため、単純にエラー表示だけを、

E_DEPRECATED

で非表示にするのではなく、今回のケースではWP-CLI自体を新しくする方が根本的な解決になりました


14. 通常のWP-CLIコマンドが簡単になる

設定後は、

wp core version
wp plugin list
wp theme list
wp db query "SHOW TABLES;"

などをそのまま実行できます。

以前のように、

/usr/bin/php8.3 /usr/bin/wp ...

と入力する必要はありません。


15. All-in-One WP MigrationのCLIでも利用できた

今回この設定を行った主な目的は、All-in-One WP MigrationのバックアップをWP-CLIから操作することでした。

例えば、

wp ai1wm list-backups

でバックアップ一覧を表示できます。

.wpress の中身を確認する場合は、

wp ai1wm browse-backup バックアップ名.wpress

展開する場合は、

wp ai1wm extract-backup バックアップ名.wpress \
  --extract-path="$HOME/ai1wm-check"

実際に復元する場合は、

wp ai1wm restore バックアップ名.wpress --yes

という形で実行できます。

今回、PHP 8.3+WP-CLI 2.12.0の環境に変更したあと、All-in-One WP Migrationからの復元も正常に完了しました。


まとめ

今回のXserver環境では、標準のWP-CLIをそのまま利用すると、現在のWordPress・PHP環境との組み合わせで問題が発生しました。

最終的には、

Xserver標準

/usr/bin/wp
WP-CLI 2.4.0

   ↓

自分専用

~/bin/wp
   ↓
PHP 8.3
   ↓
~/bin/wp-cli.phar
WP-CLI 2.12.0

という構成に変更しました。

ポイントは、Xserver標準のWP-CLIを削除・変更するのではなく、自分のホームディレクトリに新しいWP-CLIを置き、PATHでそちらを優先することです。

設定としては最終的に、

export PATH="$HOME/bin:$PATH"

と、

#!/bin/bash
exec /usr/bin/php8.3 "$HOME/bin/wp-cli.phar" "$@"

の組み合わせになります。

これにより、SSH上では単に、

wp

と入力するだけで、PHP 8.3+新しいWP-CLIを利用できるようになりました。


最終構成

~/.bash_profile

export PATH="$HOME/bin:$PATH"
~/bin/wp
#!/bin/bash
exec /usr/bin/php8.3 "$HOME/bin/wp-cli.phar" "$@"
~/bin/wp-cli.phar

この構成なら、Xserver標準の /usr/bin/wp を残したまま、自分のSSH環境だけWP-CLIを新しくできます。

記事一覧へ戻る