Hatena::Groupasakura

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

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

2010-08-23(Mon)

PHPでvar_dump()を使うと例外をcatchできないケースがある?

|  PHPでvar_dump()を使うと例外をcatchできないケースがある? - 浅倉卓司@blog風味? を含むブックマーク  PHPでvar_dump()を使うと例外をcatchできないケースがある? - 浅倉卓司@blog風味? のブックマークコメント

 例によって原因はよく分かりませんが、ずっとハマってました。。。

  • 通常は var_dump() したあとでも throw new Exception() したものを try{} catch(){} で捕捉できる
  • 同じページに複数回アクセスした場合は、何故かvar_dump()したあとの例外を捕捉できない
    • print_r()やecho var_export() による出力なら問題は起こらない
      • (訂正)print_r()やvar_export()でも問題が起こった
    • var_dump()しても問題ないケースもある。
      • var_dump()するものの中にExceptionのサブクラスがあると問題が起こるのかも。

 再現する最低限のコードを作ってみるべきとは思うのですが、「PHP業界では有名なバグなんじゃね?」という気もするので放置予定。


追記

 Exceptionおよびそのサブクラスをvar_dump()等してると、それ以降が実行されない可能性があるっぽい。

 例外をキャッチできないとかそういうレベルではなかった。


 念のために環境を書いておくと、

  • PHP Version => 5.2.13
  • セッション有効(session_start() している)
  • session_set_save_handler() でDBに保存してる

――くらいかな。あまり関係なさそうだけど。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20100823

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

2009-06-17(Wed)

__autoload()の挙動がおかしくね?

| 14:46 |  __autoload()の挙動がおかしくね? - 浅倉卓司@blog風味? を含むブックマーク  __autoload()の挙動がおかしくね? - 浅倉卓司@blog風味? のブックマークコメント

――と思って調べたら、微妙に違う気もするけど、たぶんこれ。

 うーん。やっぱ誰も使ってないんじゃろか?

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20090617
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が取得できませんでした。