この記事はCodeIgniter Advent Calendar 2016の18日目です。

今月1日にPHP 7.1がリリースされました。PHP 7.1の変更点はマニュアルにまとまっています
型に関する制御が数多く増えていて、PHPもどんどん”普通の”言語になっていくなぁという反面、負の文字列オフセットのサポートが入っているのには古き良きPHPらしいキモさを感じます。

CodeIgniterのPHP 7.1対応は3.1.2以上

さて、CodeIgniterのPHP 7.1サポートなのですが、特に明言はされていないようですが、現在の最新バージョン3.1.2の利用が必要です。3.1.1以下ではファイルセッションドライバが動きませんでした。

PHP 7.1の変更の中にセッションIDの生成に関するものがあります。
要するにはセッションIDの生成に今まで無駄な処理をしていたのをやめたということですが、そのためにphp.iniの設定項目そのものに変更が加わっています。

CodeIgniter3側の処理はきちんと確認していないのですが、3.1.2のChange LogにあるBug fix

Fixed a regression (#4874) – Session Library didn’t take into account session.hash_bits_per_character when validating session IDs.

がセッションIDに関わる変更になっています。その前段として、3.1.1で

Fixed a bug (#4830) – Session Library didn’t take into account the new session INI settings in PHP 7.1.

がPHP 7.1対応になっていますが、このチケットの最後の方で「完全じゃなかった」と、3.1.2の修正が追加されています。

不具合が起きると「セッションがすぐ消える」という挙動をするので、比較的気づきやすいと思います。
PHPのバージョンアップをするならそれなりに検証しなさいよという、当たり前といえば当たり前の話ではありますが、実際に不具合を目の前にすると「両方バージョンアップいるのか」とやや面倒な気持ちにもなりますね。


次は22日目の記事に飛びます(2016-12-23時点)。