VCCW3.x で、PHPのバージョンを5.6にする

# 結論

```
// 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を入れる
[ペンパイナッポーアッポー](https://www.youtube.com/watch?v=0E00Zuayv9Q)ではなく、[パーソナル・パッケージ・アーカイブ](https://allabout.co.jp/gm/gc/438675/)のことらしい。Ubuntu公式ではなく、そのユーザーが保守しているパッケージ集で、公式ではサポートしなくなったアプリケーションなどをaptでインストールできるようにしてくれる。
PHP5.6のインストールには、[Ondřej Surý氏によるPPA](https://launchpad.net/~ondrej/+archive/ubuntu/php)を用いる。
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してみると、実は[セグフォ](https://ja.wikipedia.org/wiki/%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%81%95%E5%8F%8D)るだけで、起動してくれない。理由は「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以上になり](https://ja.wordpress.org/about/requirements/)、さらに

> 年末に PHP 7 以降を最低必須バージョンにすることも視野に入れつつ
[日本語 « PHP 最低必須バージョンの変更 — WordPress](https://ja.wordpress.org/2019/04/03/minimum-php-version-update/#%e7%8f%be%e5%9c%a8%e3%81%af-php-5-6%e3%80%81%e8%bf%91%e3%80%85-php-7-%e4%bb%a5%e9%99%8d%e3%81%b8)

とか公式にかかれていたりするので、そのうちPHP5.6で動くものが減ってくる可能性も考えると、今の構成（WordPressはもちろん、各種プラグインも）がちゃんとPHP5.6で動くかどうか検証しないといけないなーって状況になってきて、ここ数年ちゃんとLinux触ってないながらにいろいろ調べることになったわけなんですが、案外VCCW3でWordPressを開発してる人が少ないのか、これ系の情報があまり見つからないんですよね。いや、WordPressを使う人が、Linuxの環境いじれることの方が珍しいだけなんでしょうけど。




# 参考サイト/記事
- [Ubuntu16\.04LTSにPHP5\.6をインストール \| 俺の開発大作戦](https://kobachan.biz/archives/?ID=0002)
- [Ubuntu16\.04にPHP5\.6を入れる \- Qiita](https://qiita.com/mzmiyabi/items/984335fc05faaf35428d)
- [VCCW \+ Ubuntu16にPHP5\.6をインストールして使う \| クリブロ！](https://blog.creatorslab.jp/2018/03/20/install-php5-on-vccw-ubuntu16/)
- [Ubuntu で Apache2 のモジュールを有効または無効にする方法](https://www.upken.jp/kb/ubuntu-a2enmod.html)
- [お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。 – KUJIRA note](https://blog.kujira-station.com/201501261644)
- [日本語 « PHP 最低必須バージョンの変更 — WordPress](https://ja.wordpress.org/2019/04/03/minimum-php-version-update/#%e7%8f%be%e5%9c%a8%e3%81%af-php-5-6%e3%80%81%e8%bf%91%e3%80%85-php-7-%e4%bb%a5%e9%99%8d%e3%81%b8)