unserializeされたオブジェクトのメンバ変数にアクセスするとphpファイルが頭から再実行される

私的メモ

ブラウザーを立ち上げなおしてから一回目の実行時にのみ、以下の現象が再現される

・phpページ1でユーザー定義のオブジェクトをserializeする
・phpページ2で、
          ・それをunserializeする
          ・unserializeされたオブジェクトのメソッドをコールして一部のメンバ変数が変更される
          ・オブジェクトのメンバ変数を参照しようとすると、phpページ2が頭から再実行される
          ・phpページ2は、以上の挙動をするまでの間、html出力はおこなっていない

バグなのか仕様なのかわからないが、html出力をおこなっていなければphpページ2は頭から再実行しても問題ないだろうとphp側が思っている節があるので、以下の修正にてとりあえず回避。

・phpページ2において、unserializeされたオブジェクトのメンバ変数を参照する前にダミー的なhtml出力をおこなう

phpのバージョンは5.1.6。

追記

htmlの出力をおこなってもページの再実行がおこなわれるケースあり。session_startが含まれる関数のコードの宣言をクラスの宣言が行われるコードの後に置くと、今のところ再現せず。前も今もsession_startの実行自体はクラス宣言の後なのに、不可解。

Leave a Reply

Your email address will not be published. Required fields are marked *