Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

結論

// 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.loadphp7.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の環境いじれることの方が珍しいだけなんでしょうけど。

参考サイト/記事

kkotaro0111
ウェブデザイナー・フロントエンドエンジニア・ビデオグラファー
http://utage.works
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away