PHP5.6からPHP7.3への移行対応
概要
会社の業務で、PHP5.6環境で動作しているプロダクトをPHP7.3環境に移行する対応を行ったので、対応内容を忘備録として残しておく。
一度に記事を書くのは大変なので、この記事をハブページとして、項目別にいくつかの記事に分けて投稿していく予定。
PHP5.6のサポートが切れている
公式サイトによると、PHP5.6のサポートは2019年1月に切れていることになっている。
セキュリティサポートが切れているといっても、なにも今すぐ危険だというわけではない。とはいえ、今後致命的なセキュリティバグが発見されても修正されないということなので、そのまま放置していいものでもない。
PHP7
およそ10年ぶりのメジャーアップデートというのもあり、PHP5と比べると処理性能もメモリ使用量もかなり改善されている。
理論値では、およそ2倍になるケースもあるのだとか。
「PHP 7」登場。10年ぶりのメジャーバージョンアップで実行速度はPHP 5の2倍以上に、PHPの生みの親が語る。PHPカンファレンス2015(前編) - Publickey
単純にサーバー処理時間が短くなるのでレスポンス速度が速くなるし、CPU負荷も下がるのでスケールアウトしているサービスであればサーバー台数を削減できるかもしれない。
これは移行しない手はない。
対応方針
今回の移行にあたって、メンテナンス期間なしで移行対応を行うことになった。
方法としては、スケールアウトされているサーバー群に対して、PHP7環境のサーバーをサービスインしてPHP5環境をサービスアウトする、という方法で徐々にPHP7環境へと移行していく方式をとる。
その性質上、一時的にPHP5とPHP7のサーバーが混在する期間が発生するため、コードをPHP5でもPHP7でも動作する互換性のあるコードに修正していく方針となった。
下位互換性のない変更点
メジャーアップデートなので、当然(?)下位互換性のない変更点というのがいくつかある。
詳細は公式サイトにまとまっているが、全てのソースコードを目で確認するのは土台無理な話である。
そこで、静的チェックツールを活用しつつ下位互換性のない変更点を修正していくことになる。
静的チェックツールを利用した互換性のない処理の洗い出し
今回はPHPCompatibilityを使用した。
互換コードへの修正対応
これはたくさんあるので後日別記事で書く。
(予定)PHPCompatibilityを活用してPHP5系とPHP7系どちらでも動作する互換コードに書き換える
(予定)PHPCompatibilityではチェックしきれない下位互換性のない変更点の修正