Hatena::Groupasakura

浅倉卓司@blog風味? このページをアンテナに追加 RSSフィード

Error : RSSが取得できませんでした。

2009-11-04(Wed)

PHP5.2.10とAPC3.0.19の組み合わせでsession_set_save_handler()を使うと不具合が生じる。

| 18:10 |  PHP5.2.10とAPC3.0.19の組み合わせでsession_set_save_handler()を使うと不具合が生じる。 - 浅倉卓司@blog風味? を含むブックマーク  PHP5.2.10とAPC3.0.19の組み合わせでsession_set_save_handler()を使うと不具合が生じる。 - 浅倉卓司@blog風味? のブックマークコメント

 PHP5.2.9なら問題ないので、5.2.9から5.2.10への変更で何かあったんだろうと推測。

 PHP5.2.11(あるいはAPC3.1.x)で問題ないかは未確認。


 ……相変わらずイヤになるなぁ。


追記

 バグレポ発見。bogus扱いされてるけどたぶんコレだな。


追記(2)

 どうやらセッションのwrite処理の時にクラス名のシンボルテーブルか何かがざっくりなくなってる印象。

 スコープ定義演算子を使うものはNG*1

 既に存在するインスタンスのメソッド呼び出しなどは問題なく動く。


追記(3)

 どうやら

  1. セッションの終了処理
  2. APCの終了処理(ここでシンボルの破棄)

――だったのが、

  1. APCの終了処理(ここでシンボルの破棄)
  2. セッションの終了処理

――に変わったのではないか? と職場の同僚のお話。

 ChangeLogには特になかった気もするけど、PHPは互換性を気にせず平気でいろいろ変更したりするからありそうな気はする。

 PHPの内部の話はどこで相談するのがええんじゃろ。


追記(2009-11-05)

 上記の理由から「ひょっとして、register_shutdown_function() で session_write_close を登録したら動くんじゃね?」と思ってやってみたら、ちゃんと動くようになった。

 これで副作用がなければいいのだけれど。。。


追記(ラスト)

 どうもextensionの終了処理の順番が変わったせいらしい。

(5.2.9と5.2.10で変わってた)

 で、終了処理はRSHUTDOWNとpost-RSHUTDOWNの2種類あるっぽいので、APCは現在RSHUTDOWNでやってる処理をpost-RSHUTDOWNでやるように修正すべきっぽい。

*1:たとえば、PEAR::isError()。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20091104
2004 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 11 | 12 |
2007 | 02 | 03 | 04 | 05 | 06 | 07 | 10 | 11 | 12 |
2008 | 02 | 03 | 04 | 06 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 02 | 03 | 04 | 05 | 07 | 08 | 10 | 11 | 12 |
2013 | 01 | 05 | 07 |
2014 | 01 | 02 |
2016 | 01 |
2017 | 01 | 05 |
Error : RSSが取得できませんでした。