11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHP5.5系からPHP5.6系へ移行するための準備

Last updated at Posted at 2015-11-16

はじめに

現在、自分の会社ではPHP5.5による開発を実施しています。先日、チームメンバーよりサポート期間も踏まえてバージョンをあげましょうと提案いただきました。今回はその対応で動作検証したときのお話しです。

PHP5.6系の話は今更感ありますが、やらないよりはやりましょうということで整理してみました。

PHPのリリース及びサポート期間

下記、wikipedia にて整理されています。

スクリーンショット 2015-11-16 14.58.07.png

PHP5.4以降を抜き出すとこんな感じです。

・5.4系のサポートは2015年9月3日に終了している
・5.5系のサポートは2016年6月まで
・5.6系のサポートは2017年8月まで
・7.0,7.1系のサポートはリリースから3年

5.5系だと残り7ヶ月となりますので、早めに5.6系への準備をしても良さそうです。ちなみに7系は、利用しているフレームワークのメジャーバージョンアップが伴ったり、影響範囲が大きそうですので今回はパスしました。

PHP 5.5 系から PHP5.6系への移行

5.5系と5.6系の違いは下記を見てもらえればまとまっています。日本語です。

スクリーンショット 2015-11-16 23.44.32.png

特に確認しておくべき点は、次でしょうか。

互換性が無いとのことですので、注意してください。下記でもまとめられています。上記リンクと似ていますので適宜参考にしてください。

動作検証の環境

  • iMac OS X EI Capitan(10.11.1)
  • Vagrant + CentOS7.0 + Nginx1.8 + PHP5.6 + PHP-fpm5.6

環境構築方法については、また別途共有しようと思います。仮想環境って素敵です。

検証ではまったところ(個人の環境に依存してます)

自分達は、開発の一環としてテストコードを書いていますので、5.6系の環境を構築しテストを実行することで動作検証を実施しました。

全然別のところですが、次の点で少しハマってしまいました。

API系のテストで cURL にてHTTPリクエストを発行しているところがあるのですが、今までは問題なく動いていたのに、新しい環境だと動かない・エラーになるということがありました。こういうとき、テストを書いていて良かったと思える瞬間です。

問題の箇所は、リクエストパラメータがnullの場合、POSTフィールドの指定しなくても PHP5.5系では動作したのですが、5.6系ではnullでも明示的に指定しないとレスポンスを正しく受け取ることができませんでした。「json_decodeがより厳格」になったことで、影響を受けていたようです。

上記以外については、特に問題なくテストも通りました。

まとめ

  • テストコードを書いているとこういうときにも大変有効だということが身を持って知ることができました。
  • 1、2年くらいするとPHP7対応のフレームワークが揃い、事例も増えてくると思います。しかし既存コードの見直しは多くなるかもしれません。
  • バージョン移行は計画性を持って進めたいですが、アプリケーション実装もあると忘れがちですので気を付けたいですね。(自戒もこめて)
11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?