結論
// in the client
$ sudo add-apt-repository ppa:ondrej/php ### PPAのインストール
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt install php5.6 ### php5.6のインストール
$ sudo a2enmod php5.6 ### apacheにphp5.6モジュールを組み込む(有効化)
$ sudo a2dismod php7.0 ### apacheからphp7.0モジュールを除去(無効化) これを書いてない記事が多い
$ sudo apt-get install php5.6-mysql ### 'Your PHP installation appears to be missing the MySQL extension which is required by WordPress.' エラーへの対処
$ sudo apt-get install php5.6-mbstring ### WP Multibyte Patchあたりが必要としてるっぽい
$ sudo service apache2 restart
経緯
普段WordPressの開発に、Virtualbox + Vagrant + VCCW3 を使っているのだけど、未だWordPressの本番環境ではPHP5.x上で動かしてるものも少なくなくなくなくなくなくて、できるだけ本番環境に近い開発環境を用意したいものの、VCCW3はUbuntu16.04がベースにあるため、PHPの標準バージョンが7な上に、PHP5.6を標準でサポートしてないという状況のため、もどかしい気持ちになっていた。
手順
PPAを入れる
ペンパイナッポーアッポーではなく、パーソナル・パッケージ・アーカイブのことらしい。Ubuntu公式ではなく、そのユーザーが保守しているパッケージ集で、公式ではサポートしなくなったアプリケーションなどをaptでインストールできるようにしてくれる。
PHP5.6のインストールには、Ondřej Surý氏によるPPAを用いる。
PPAをインストールしたら、リストの更新のためにも、 apt-get update
をしておこう。
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt-get update
$ sudo apt-get upgrade # ついで
PHP5.6 を入れる
Linux系の環境で、導入されている設定を切り替えるには、いろんな手続きが必要だったりするものだけど、今回はひとまずいきなりPHP5.6を入れても大丈夫のようだ。
PPAを入れることで、PHP5.6のインストールは可能になったのだから、早速入れてしまおう。
$ sudo apt-get install php5.6
PHP5.6 を apache で使えるようにする。
PHP5.6をインストールしただけではまだ使える状態にはなっていない。というか、apacheが「PHP5.6を使うべき」という認識をしてくれていないのだ。このままでは依然PHP7.0を使い続けてしまう(なぜPHP7.3じゃないんだろう…)
そこで、apacheのモジュールに、PHP5.6モジュールを組み込んで、使えるようにする。ただ、有効にしてapacheをrestartしてみると、実はセグフォるだけで、起動してくれない。理由は「PHP7.0モジュールも組み込まれているから」である。($ ls /etc/apache2/mods-enabled/
を見てみると、php5.6.load
とphp7.0.load
の2つが設置されいていることに気づくはずだ)。なので、これの除去もちゃんと行なっておく。
$ sudo a2enmod php5.6 ### apacheにphp5.6モジュールを組み込む(有効化)
$ sudo a2dismod php7.0 ### apacheからphp7.0モジュールを除去(無効化) これを書いてない記事が多い
余談1
調べた限りでは、この$ sudo a2dismod php7.0
について書かれているサイトがほぼ無くて、結構迷った。実際、a2dismod php7.0
をキーワードに検索して初めて見つけたくらいだ。
余談2
本来ならここで、CUIのPHPバージョンも5.6にしておくべきなんだろうが、wp-cliの何かプラグインがPHP5.xでは動かなかった気がするので、一旦保留。ただ、wp-cli経由でWordPress動かしたときに、PHP7.x上でWordPressを処理するのであれば、CUIの方もPHP5.6に変えないといけない気がするなぁ…
PHPからmysqlが
ここでapacheをrestartしてみると、起動はするもののページがちゃんと表示されてくれない、という問題が起こる。画面にはそっけなく
Your PHP installation appears to be missing the MySQL extension which is required by WordPress.
というテキストが表示されるのみだ。
これは、今のPHPモジュールからMySQL拡張が利用できないが故に表示されるようで、実際調べてみると、$ php -m | grep mysql
の結果にmysqlという行がないことに気づく。
一般に、こういうときは $ sudo apt-get install php-mysql
と打って、PHPのmysqlモジュールを入れるべきなのだが、言ってみればこのデフォルトのライブラリは、Ubuntu16.04標準のPHP7.x用のmysqlモジュールを指しているので、これでは解決しない。ちゃんと php5.6用のモジュールを入れてあげよう。
$ sudo apt-get install php5.6-mysql
mbstringも大事
普段はあまり有効性を感じないんだけど、まぁ大体の日本語環境では有効化されているプラグインWP Multibyte Patch。別になくても普通に使えるものの、もし自身の環境でこれが有効化されているなら、その内部で mbstring を使っているようなので、これも使えるようにしておく。
上記同様、普通ならphp-mbstring
を入れるので良いのだけど、今回はPHP5.6向けのものが必要なので、php5.6-mbstring
で対応する。
$ sudo apt-get install php5.6-mbstring
apache2をリロード!
最後に、今まで入れたり変更したりした設定を有効にするため、apache2をリロードする。
リロード方法はいくつかあるが、$ sudo a2enmod php5.6
を実行したときに表示された方法でリロードすることにする。
$ sudo service apache2 restart
おわりに
いままでずっと「本番はPHP5.xだけど、まぁPHP7.xで動けばだいたい動くでしょ、WordPressは」みたいな雑な考えで逃げ続けていたのだが、WordPressも5.2になって、推奨環境がPHP7.3以上になり、さらに
年末に PHP 7 以降を最低必須バージョンにすることも視野に入れつつ
日本語 « PHP 最低必須バージョンの変更 — WordPress
とか公式にかかれていたりするので、そのうちPHP5.6で動くものが減ってくる可能性も考えると、今の構成(WordPressはもちろん、各種プラグインも)がちゃんとPHP5.6で動くかどうか検証しないといけないなーって状況になってきて、ここ数年ちゃんとLinux触ってないながらにいろいろ調べることになったわけなんですが、案外VCCW3でWordPressを開発してる人が少ないのか、これ系の情報があまり見つからないんですよね。いや、WordPressを使う人が、Linuxの環境いじれることの方が珍しいだけなんでしょうけど。