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

19年2月23日(Sat) 2時34分
TOP » UsersWiki » nao-pon » blog » 2010-04-10

RSS of nao-pon/blog
2010 4月 10 (土)
 

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:

新しくコメントをつける

題名
ゲスト名
投稿本文

より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 8235, today: 1, yesterday: 3
初版日時: 2010-04-11 (日) 00:15:49
最終更新: 2010-04-11 (日) 00:15:49 (JST) (3240d) by nao-pon
このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証

新規登録 | パスワード紛失



メインメニュー
UsersWiki メニュー
付箋メニュー
付箋メニュー 
付箋の編集
文字色: 背景色:
お名前:  線接続id:
 
ブックマーク
オンサイトブックマークは
ログインするとご利用になれます
[ログインする]
サイト内 Wiki
☆ 検索 ☆



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

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

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

nao-pon
 

登録ユーザ数: 4598


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