hypweb.net
XOOPSマニア  最新情報のRSS(サイト全体)
[ 自宅サーバーWebRing |ID=54 前後5表示乱移動サイト一覧 ]

19年6月25日(Tue) 19時47分
TOP » UsersWiki » nao-pon » blog » 2010-04-10

RSS of nao-pon/blog
Sat 10 Apr 2010
 

PHP >= 5.2.10 + APC での session_set_save_handler() 問題の解決法 anchor.png

このページの以前の内容は間違いでした。(2011-10-21 追記)

Page Top

正解は次のような感じです。 anchor.png

    • セッションのカスタムハンドラでオブジェクトを使用している時にセッションが保存されない場合は、カスタムハンドラオブジェクトのデストラクタで session_write_close() を コールする。
    • PHP: session_set_save_handler - Manual

      PHP 5.0.5 以降、write ハンドラおよび close ハンドラはオブジェクトが破棄されたあとにコールされます。 そのため、セッション内でデストラクタを使用可能ですが、 ハンドラ内ではオブジェクトを使用できません。

      この「ニワトリが先かタマゴが先か」の問題を解決するために、 デストラクタから session_write_close() を コールすることが可能です。

    • XOOPS 2 の場合、kernel/session.php の XoopsSessionHandler クラスにデストラクタを追加することで APC 使用時も問題なくセッションが使えるようになる。
      •     // for PHP >= 5.0.5
            function __destruct() {
                session_write_close();
            }
Page Top

以下は当時の記事で間違った対応策。 anchor.png

2010-01-13 の Blog で、PHP 5.3.1 + APC APC-3.1.3p1 で、XOOPS のセッションが正常に機能しなくて、ログインできない問題があると書いて、なんとか適当な修正で乗り切ってきたけど、正解ぽい修正案を見つけたので、試してみたところ上手くいった。

  • PHP5.2.10とAPC3.0.19の組み合わせでsession_set_save_handler()を使うと不具合が生じる。 - 浅倉卓司@blog風味? - ひとりでもグループ
    • 終了処理の順番が問題らしい。PHP5.2.10 以降では、スクリプト終了時のセッションの終了処理の前にエクステンションの終了処理(PHP_RSHUTDOWN)が実行されるようになったらしい。

      なので、APCの終了処理で、セッションハンドラーオブジェクトが破棄されてしまいセッションの書き込み処理が行われないという状況になっていた模様。

  • 徒然と: pecl-APCとphp-5.2.10
    • このページに上記の問題を解決する方法そのものがバッチリ紹介されていた。
    • その方法: APC の終了処理を PHP_RSHUTDOWN から ZEND_MODULE_POST_ZEND_DEACTIVATE_N に変更する。 :ok:
      --- php_apc.c.org	2010-04-10 20:37:52.000000000 +0900
      +++ php_apc.c	2010-04-10 23:10:44.000000000 +0900
      @@ -314,7 +314,7 @@
       /* }}} */
       
       /* {{{ PHP_RSHUTDOWN_FUNCTION(apc) */
      -static PHP_RSHUTDOWN_FUNCTION(apc)
      +static ZEND_MODULE_POST_ZEND_DEACTIVATE_D(apc)
       {
           if(APCG(enabled)) {
               apc_request_shutdown(TSRMLS_C);
      @@ -1628,10 +1628,12 @@
           PHP_MINIT(apc),
           PHP_MSHUTDOWN(apc),
           PHP_RINIT(apc),
      -    PHP_RSHUTDOWN(apc),
      +    NULL,
           PHP_MINFO(apc),
           PHP_APC_VERSION,
      -    STANDARD_MODULE_PROPERTIES
      +    NO_MODULE_GLOBALS,
      +    ZEND_MODULE_POST_ZEND_DEACTIVATE_N(apc),
      +    STANDARD_MODULE_PROPERTIES_EX
       };
       
       #ifdef COMPILE_DL_APC
      • この修正を php_apc.c に行いリビルドしたら、バッチリOKとなりました。 :thumb_up:

Post a new comment

Subject
guestname
Body

Go to richer form

Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 8664, today: 3, yesterday: 4
Princeps date: 2010-04-11 (Sun) 00:15:49
Last-modified: 2010-04-11 (Sun) 00:15:49 (JST) (3362d) by nao-pon
このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証

Register now! | Lost Password?



メインメニュー
UsersWiki メニュー
付箋メニュー
Fusen(Tag) menu 
Tag Editor
Color: BG:
Name:  Connect line ID:
 
ブックマーク
Please log in to use it.
[Login]
サイト内 Wiki
☆ 検索 ☆



高度な検索(サイト内)
FireFox検索プラグイン
オンライン状況
合計 49 人がオンライン中 :-)
(UsersWiki : 3 人)

登録ユーザ: 0 & ゲスト: 49

もっと...
サイト情報
管理人

nao-pon
 

登録ユーザ数: 4606


Web Services by Yahoo! JAPAN
楽天ウェブサービスセンター
Amazon.co.jpアソシエイト
現在ページのQRコード
現在ページのQRコード
[携帯対応]
参照元情報