WordPressの動産環境においては、PHPのバージョン7以上が推奨とされています。
Remiリポジトリを導入し、PHP5.3からPHP7.1へアップデートした際の手順、注意点をまとめました。なお、ここではまずPHP5.3からPHP5.6へアップデートしてWordPressなどの動作確認を行い、その後PHP5.6から7.1へアップデートを行っています。
※目次をクリックすると目次の下部にコンテンツが表示されます。
- 1.PHPバージョンアップに伴う変更点
- 2.Remiリポジトリのインストール
- 3.PHP5.3からPHP5.6へアップデート
- 4.PHP5.6からPHP7.1へアップデート
- 5.WordPressで発生した不具合
- 6.SSH2拡張が使用できなくなる不具合
私は、記載されている量が多く事前に問題ないか判断することが出来なかったので、検証環境で実際にアップデートを行いWordPressなどで動作確認を行って問題ないか評価しました。
以下オンラインマニュアルに目を通した際の抜粋、メモ書きです。
●PHP 5.3.x から PHP 5.4.x への移行
http://php.net/manual/ja/migration54.php
・PHP 5.4.x で改良された点のほどんどは、既存のコードに影響を及ぼさない。
〇互換性がない変更
http://php.net/manual/ja/migration54.incompatible.php
●PHP 5.4.x から PHP 5.5.x への移行
http://php.net/manual/ja/migration55.php
・PHP 5.5.x で改良された点のほどんどは、既存のコードに影響を及ぼさない。
〇互換性がない変更
http://php.net/manual/ja/migration55.incompatible.php
●PHP 5.5.x から PHP 5.6.x への移行
http://php.net/manual/ja/migration56.php
・PHP 5.6.x で改良された点のほどんどは、既存のコードに影響を及ぼさない。
〇互換性がない変更
http://php.net/manual/ja/migration56.incompatible.php
・配列リテラルを用いてクラスのプロパティに配列を設定した場合、配列のキーが上書きされない。
・json_decode() が、より厳格に。
●PHP 5.6.x から PHP 7.0.x への移行
http://php.net/manual/ja/migration70.php
・PHP 7.0 は新しいメジャーバージョンではあるが、 過去のバージョンからの移行をできるだけスムーズに行えるよう心がけている。
・このリリースで主に注力したのは、これまでのバージョンで廃止予定とされていた機能の削除や、 言語としての一貫性の向上。
〇互換性がない変更
http://php.net/manual/ja/migration70.incompatible.php
・エラーや例外の取り扱いの変更。
fatal error や recoverable fatal error の多くが、PHP 7 では例外に変換されるようになった。自作のエラーハンドラは呼び出されなくなる (Error 例外をキャッチしなかった場合は、fatal エラーが発生する)。
・変数の取り扱いの変更。
変数やプロパティそしてメソッドへの間接的なアクセスを、厳密に左から右の順で評価するようになった。
・ereg* 系のすべての関数を削除。PCRE を使うことを推奨
http://php.net/manual/ja/book.regex.php
・すべての ext/mysql 関数を削除。
http://php.net/manual/ja/book.mysql.php
MySQL API の選択については以下を参照。
http://php.net/manual/ja/mysqlinfo.api.choosing.php
・ASP タグと script タグの廃止
・$HTTP_RAW_POST_DATA の削除。代わりに php://input ストリームを使う。
●PHP 7.0.x から PHP 7.1.x への移行
・このマイナーバージョンアップには数多くの新機能がある。
〇互換性がない変更
http://php.net/manual/ja/migration71.incompatible.php
Remiリポジトリを使用するにはEPELリポジトリが必要なのでEPELリポジトリもインストールします。
※English : Repository Configuration – Remi’s RPM repository – Blog
●EPELリポジトリインストール
# yum install epel-release
●Remiリポジトリインストール
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# yum update --enablerepo=remi,remi-php56 php php-devel php-mbstring php-pdo php-mysql Installed: php-mysqlnd.i686 0:5.6.31-1.el6.remi Dependency Installed: gd-last.i686 0:2.2.4-1.el6.remi libevent2.i686 0:2.0.21-2.el6 libwebp.i686 0:0.4.3-3.el6 libzip5.i686 0:1.2.0-1.el6.remi php-gmp.i686 0:5.6.31-1.el6.remi php-google-recaptcha.noarch 0:1.1.3-1.el6.remi php-pecl-apfd.i686 0:1.0.1-1.el6.remi.5.6 php-pecl-json-post.i686 0:1.0.1-1.el6.remi.5.6 php-pecl-jsonc.i686 0:1.3.10-2.el6.remi.5.6 php-pecl-jsonc-devel.i686 0:1.3.10-2.el6.remi.5.6 php-pecl-zip.i686 0:1.15.1-1.el6.remi.5.6 php-phpmyadmin-motranslator.noarch 0:3.3-1.el6.remi php-phpmyadmin-shapefile.noarch 0:2.1-1.el6.remi php-phpmyadmin-sql-parser.noarch 0:4.1.8-1.el6.remi php-phpseclib.noarch 0:2.0.6-1.el6.remi php-recode.i686 0:5.6.31-1.el6.remi php-symfony-class-loader.noarch 0:2.8.24-1.el6.remi php-symfony-common.noarch 0:2.8.24-1.el6.remi php-symfony-expression-language.noarch 0:2.8.24-1.el6.remi php-udan11-sql-parser.noarch 0:3.4.17-2.el6.remi recode.i686 0:3.6-28.1.el6 t1lib.i686 0:5.1.2-6.el6_2.1 Updated: php.i686 0:5.6.31-1.el6.remi php-devel.i686 0:5.6.31-1.el6.remi php-mbstring.i686 0:5.6.31-1.el6.remi php-pdo.i686 0:5.6.31-1.el6.remi Dependency Updated: php-bcmath.i686 0:5.6.31-1.el6.remi php-cli.i686 0:5.6.31-1.el6.remi php-common.i686 0:5.6.31-1.el6.remi php-gd.i686 0:5.6.31-1.el6.remi php-mcrypt.i686 0:5.6.31-1.el6.remi php-pecl-http.i686 0:2.6.0-1.el6.remi.5.6 php-pecl-propro.i686 0:1.0.2-1.el6.remi.5.6 php-pecl-raphf.i686 0:1.1.2-1.el6.remi.5.6 php-process.i686 0:5.6.31-1.el6.remi php-tcpdf.noarch 0:6.2.13-1.el6.remi php-tcpdf-dejavu-sans-fonts.noarch 0:6.2.13-1.el6.remi php-tidy.i686 0:5.6.31-1.el6.remi php-xml.i686 0:5.6.31-1.el6.remi phpMyAdmin.noarch 0:4.7.2-1.el6.remi Replaced: php-mysql.i686 0:5.3.3-49.el6 Complete!
# yum update --enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-mysql Installed: php-devel.i686 0:7.1.7-1.el6.remi php-json.i686 0:7.1.7-1.el6.remi Dependency Installed: libicu-last.i686 0:50.1.2-11.el6.remi Updated: php.i686 0:7.1.7-1.el6.remi php-mbstring.i686 0:7.1.7-1.el6.remi php-mysqlnd.i686 0:7.1.7-1.el6.remi php-pdo.i686 0:7.1.7-1.el6.remi Dependency Updated: php-bcmath.i686 0:7.1.7-1.el6.remi php-cli.i686 0:7.1.7-1.el6.remi php-common.i686 0:7.1.7-1.el6.remi php-gd.i686 0:7.1.7-1.el6.remi php-gmp.i686 0:7.1.7-1.el6.remi php-mcrypt.i686 0:7.1.7-1.el6.remi php-pecl-apfd.i686 0:1.0.1-8.el6.remi.7.1 php-pecl-http.i686 0:3.1.0-1.el6.remi.7.1 php-pecl-json-post.i686 0:1.0.1-6.el6.remi.7.1 php-pecl-propro.i686 0:2.0.1-3.el6.remi.7.1 php-pecl-raphf.i686 0:2.0.0-3.el6.remi.7.1 php-pecl-zip.i686 0:1.15.1-1.el6.remi.7.1 php-process.i686 0:7.1.7-1.el6.remi php-recode.i686 0:7.1.7-1.el6.remi php-tidy.i686 0:7.1.7-1.el6.remi php-xml.i686 0:7.1.7-1.el6.remi Replaced: php-pecl-jsonc.i686 0:1.3.10-2.el6.remi.5.6 php-pecl-jsonc-devel.i686 0:1.3.10-2.el6.remi.5.6 Complete!
いずれもWordPressのバージョンが古かったためのようでバージョン4.7.1へ更新したら解決されました。
〇管理インタフェースにログインできない
PHP Fatal error: Uncaught Error: Cannot create references to/from string offsets in /var/www/html/wp/wp-includes/user.php:56 Stack trace: #0 /var/www/html/wp/wp-login.php(784): wp_signon('', '') #1 {main} thrown in /var/www/html/wp/wp-includes/user.php on line 56
WordPressのバージョンが4.5.9と古かったからのようです。
WordPress4.7.1では解決されているようです。
https://core.trac.wordpress.org/ticket/37071
https://github.com/roots/bedrock/issues/289
以下の方法で暫定対応してログインできるようにし、WordPressをアップデートして解決できました。
# vi wp-login.php
$user = wp_signon( ”, $secure_cookie );
↓
$user = wp_signon( array(), $secure_cookie );
〇plugin.phpに関わる警告
Warning: Parameter 1 to wp_default_scripts() expected to be a reference, value given in /var/www/html/wp/wp-includes/plugin.php on line 601
Warning: Parameter 1 to wp_default_styles() expected to be a reference, value given in /var/www/html/wp/wp-includes/plugin.php on line 601
これもWordPressのバージョンが4.5.9と古かったからのようで、WordPress4.7では解決されているようです。
※SSH2拡張については以下の記事参照。
WordPressでFTP接続情報が表示、SSH転送で回避
●peclのssh2はPHP7は非対応?
peclのssh2を更新しようとすると以下のエラーが発生しました。
pecl/ssh2 requires PHP (version >= 4.0.0, version <= 6.0.0) ●yumでphp-pecl-ssh2をインストール
php-pecl-ssh2をインストールしたら解決できました。
# yum install --enablerepo=epel,remi,remi-php71 php-pecl-ssh2 ・・・ Installed: php-pecl-ssh2.x86_64 0:1.1.2-1.el6.remi.7.1 Complete! # rpm -ql php-pecl-ssh2 /etc/php-zts.d/40-ssh2.ini /etc/php.d/40-ssh2.ini /usr/lib64/php-zts/modules/ssh2.so /usr/lib64/php/modules/ssh2.so /usr/share/doc/pecl/ssh2 /usr/share/doc/pecl/ssh2/LICENSE /usr/share/doc/pecl/ssh2/README.md /var/lib/pear/pkgxml/php-pecl-ssh2.xml # more /etc/php.d/40-ssh2.ini ; Enable ssh2 extension module extension=ssh2.so