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-replace
や wp rewrite flush
もやってみたが、想定通りの動きをしてくれており、これで基本的には問題がなさそうだ。
結論は、最初に書いてしまったのでアレだが、
sv855以前のXserverで、wp-cliをphp7上で動かすなら、 /opt/php-7.1.2/bin/php
を用いる。
で、良さそうである。