開発環境で動いていたプログラムが、
本番環境にいったら動かない!!
ということはよくある。
多いのは、どこまでをエラーとして出力するかの定義の差の場合が多い。
昔からの資産があると、どうしてもワーニングが出てしまう事がある。本当はワーニングを出ないようにすべきなのだが。。。
そのような場合、多くは
.htaccessに
php_value error_reporting 30711
と書けば問題は解決してくれる。
しかし、今回は違った、ログインの情報をセッション変数に入れているのだが、リダイレクトするとその情報が引き継げないという現象が起きた。
ネットで調べると、多くはsession_start();の前に、
何かを出力してしまった事が原因という単純なもの。
ようやっと、リダイレクトでうまくいかないとの報告は見つけたが、その解決策は無し。
本番環境の構築の期限は迫っている。
しょうがないので、セキュリティー的にはNGなんだろうが、画面遷移をするためのformを用意して、それを使う事でとりあえず納品とした。
同じプログラムをデモとして別のサーバにもアップした。サーバはmix-host。
ログインなどは問題なく出来ているが、
error.log
なるものが出力されていることに気がついた。
その内容は、
session_start(): Cannot start session when headers already sent in
session_start()が失敗する?
コードは
<?php
session_start();
:
とその前には何もない。
しかし、エラーメッセージから調べると、
ファイルにBOMが付いているとsession_start();が失敗するとのページを見つけた。
セッション変数を引き継げないページのsession idを調べると何も設定されていなかったのを思い出す。
恐る恐るBOMを確認する、付いていた!!
BOMを外してみた。
formが無くても動く!!
シンプルにsession_start();が失敗していたのか。
mix-host を使わないとわからなかった。