先日、PHPの案件で奇妙な現象に遭遇した。

カート情報をセッション変数に持つフルスクラッチのECサイトで、下記のような遷移フローの中で問題が起きた。

  1. カート画面
  2. 注文者情報・お支払情報入力画面
  3. 入力内容確認画面

フロー中、2の入力画面に遷移すると、1のカート画面で保存されたセッション変数がNullになってしまうのだ。

この問題でよくあるのがsession_start()関数の書き忘れだが、正しく記述されている。

この他、あらゆる原因を考えてみたが答えにたどり着かず、長時間この問題に悩まされた。

こんなところに原因が!?

色々とコードを触っていると、ひょんなことから問題の解決に至った。


<?php
session_start();
// Code...

元のコードのPHP開始タグの前に2行の改行があったのだが、この改行を削除することでセッション変数がNullになる問題が解消された。

<?php
session_start();
// Code...

こちらは前任者から引き継いだファイルで、本番環境で動いていたのでこれまで特に気にしなかったのだが、devサブドメインを当てたステージング環境でだけこの問題が起きた。

詳しい原因はわからないが、この記事が同じ問題で悩まされているプログラマーの一助になることを願う。