8
6

More than 3 years have passed since last update.

Xserver で wp-cli を動かす

Last updated at Posted at 2018-04-09

Xserverでwp-cliを動かそうとしても、なんかエラーばかりで全然動いてくれなかったのだが、いろいろ試行錯誤の結果なんとかなった、という記録。

結論

wp-cliをphp7で動かすなら、 /opt/php-7.1.2/bin/php を用いる。

$ /opt/php-7.1.2/bin/php ~/bin/wp-cli.phar help

NAME
  wp

DESCRIPTION
  Manage WordPress through the command-line.

SYNOPSIS
  wp <command>

SUBCOMMANDS
  akismet             Filter spam comments.
  backwpup            Class for WP-CLI commands
  ...

.bashrc に alias 書いておけば幸せになれる

$ echo 'alias wp="/opt/php-7.1.2/bin/php ~/bin/wp-cli.phar"' >> ~/.bashrc
$ source ~/.bashrc
$ wp help

Xserver のバージョン

Xserverは、サーバーが稼働したタイミングによりいくつかのバージョンがあり、バージョンごとに仕様が異なるので、一言に「Xserverで動かす」といっても、必ずしもそのとおりにやれば動いてくれるわけではない。(※ バージョンと呼ぶのはちょっと違う気がするけど、まぁ察してください)

このバージョンは、サーバー番号から判断することができる。ざっくり、下記の3種類の仕様があるっぽい。

  • sv1〜sv855
  • sv856〜sv1999
  • sv2001〜現在

データベース仕様一覧 | レンタルサーバー【エックスサーバー】

今回、wp-cliを動かしたのは、一番古い sv1〜sv855 に該当するサーバーである。他の記事を見る限り、それ以外のサーバーだと、特に苦労することなく動くっぽいのだが、初期サーバーだとphp-cliが走らせるPHPのバージョンが5.1.xになるため、うまく動かないのである。

初期サーバーでの問題点

ひとまず純粋にwp-cliを入れて動かしてみる

$ cd ~/bin/
$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
$ chmod +x wp-cli.phar
$ wp-cli.phar --info

PHP Fatal error:  Class 'Phar' not found in /home/<user_name>/bin/wp-cli.phar on line 3
X-Powered-By: PHP/5.1.6
Content-type: text/html

この調子である。
というのも、wp-cli自体の実行要件が PHP5.3.29以上 とあり、Xserverの PHP5.1.6 では要件を満たせていないのだ。
Command line interface for WordPress | WP-CLI

php7を使う

Xserverには、初期サーバーでもphp7が使えるようになっている。

$ whereis php7
php7: /usr/bin/php7.1 /usr/bin/php7.0

php7を用いて実行すれば動くかもしれない、として試した結果が下記である

$ php7.1 ~/bin/wp-cli.phar --info

X-Powered-By: PHP/7.1.2
Content-type: text/html; charset=UTF-8

OS:     Linux 2.6.18-426.el5.BET #1 SMP Tue Feb 13 21:12:18 JST 2018 x86_64
Shell:  /bin/bash
PHP binary:     /opt/php-7.1.2/bin/php-cgi
PHP version:    7.1.2
php.ini used:   /opt/php-7.1.2/etc/php.ini
WP-CLI root dir:        phar://wp-cli.phar
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       /home/<user_name>/bin
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 1.5.0

こいつ…動くぞ!!

というわけで、wp-cliが動いた…と思って、実作業に移ろうとすると…

# バックアップしたDBのリストア
$ php7.1 ~/bin/wp-cli.phar db import dump.sql --path=wp/

PHP Warning:  fwrite() expects parameter 1 to be resource, string given in phar:///home/<user_name>/bin/wp-cli.phar/php/WP_CLI/Loggers/Base.php on line 61
X-Powered-By: PHP/7.1.2
Content-type: text/html; charset=UTF-8

…あれ、Successが表示されないぞ…?
別の方法でDBを確認するが、やはりリストアができていない。
ちなみに、 wp-cli help も動いてない。

$ php7.1 ~/bin/wp-cli.phar help

PHP Warning:  proc_open(): Descriptor item must be either an array or a File-Handle in phar:///home/<user_name>/bin/wp-cli.phar/php/utils.php on line 1346
PHP Warning:  proc_close() expects parameter 1 to be resource, boolean given in phar:///home/<user_name>/bin/wp-cli.phar/php/commands/help.php on line 139
X-Powered-By: PHP/7.1.2
Content-type: text/html; charset=UTF-8

ヘルプも読めないこんな世の中じゃ

「うごかない」では済まされない

一応、エラーメッセージは表示されているが、調べてみるとphp.iniとかの設定を変える必要がありそうで、ちょっともうこれ大変すぎるだろ、となってしまった。

同様の問題で悩んでいる方の記事を見ると、

php-cli使うと治る

という情報があるらしく、それも試してみたが、php-cli がPHP5.1.6の実行になっているため、やはりうまく動かなかった。
エックスサーバーにWP-CLIをインストールする話。失敗?。 | がまログ

実は /usr/bin/php7.1 は php-cli ではない

先の wp-cli --infoの結果を見ればわかるのだが、実はそれを動かしていた/usr/bin/php7.1は、cliではない。
では何かと言うと、(正直良くわかっていないが)これは php-cgi というコマンドのようだ。

$ ls -l /usr/bin/php7.1

lrwxrwxrwx 1 root root 26 May 12  2017 /usr/bin/php7.1 -> /opt/php-7.1.2/bin/php-cgi

今はCLIでphpを動かしたいので、php-cliなphpコマンドを探してみると、php-cgiを同じディレクトリに、phpというコマンドを発見した。

$ ls /opt/php-7.1.2/bin/

pear  peardev  pecl  phar  phar.phar  php  php-cgi  php-config  phpdbg  phpize

こ、これだ! これに違いない!

$ wp で実行させる

上記のphpコマンドを直接指定し、wp-cliを実行してみる。

$ /opt/php-7.1.2/bin/php ~/bin/wp-cli.phar --info

OS:     Linux 2.6.18-426.el5.BET #1 SMP Tue Feb 13 21:12:18 JST 2018 x86_64
Shell:  /bin/bash
PHP binary:     /opt/php-7.1.2/bin/php
PHP version:    7.1.2
php.ini used:   /opt/php-7.1.2/etc/php.ini
WP-CLI root dir:        phar://wp-cli.phar
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       /home/<user_name>/<domain>/public_html
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 1.5.0
$ /opt/php-7.1.2/bin/php ~/bin/wp-cli.phar help

NAME
  wp

DESCRIPTION
  Manage WordPress through the command-line.

SYNOPSIS
  wp <command>

SUBCOMMANDS
  akismet             Filter spam comments.
  backwpup            Class for WP-CLI commands
  ...

うごいたー!!!
実作業ではどうだろう。

# バックアップしたDBのリストア
$ wp db import dump.sql --path=wp/
Success: Imported from 'dump.sql'

Success でたー!!!

fwrite()のWarnも、proc_open()のWarnもでない状態で、ちゃんと目的の作業が可能となった。
この後、 wp search-replacewp rewrite flush もやってみたが、想定通りの動きをしてくれており、これで基本的には問題がなさそうだ。

結論は、最初に書いてしまったのでアレだが、
sv855以前のXserverで、wp-cliをphp7上で動かすなら、 /opt/php-7.1.2/bin/php を用いる。
で、良さそうである。

参考記事

8
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6