[
自宅サーバーWebRing
┃
前
|ID=54
前後5表示
|
次
┃
乱移動
|
サイト一覧
]
このサイト内
書籍 DVD CD
Google(日本語)
Google(Web全体)
Google(イメージ)
Google(キャッシュ)
Yahoo! JAPAN
goo 英和
goo 和英
goo 国語
goo 新語
サイトマップ
リンク集
ダウンロード
フォーラム
Users Wiki
最新情報
TOP
»
UsersWiki
»
nao-pon
»
blog
» 2010-04-10のソース
|
一覧
検索
最新
ヘルプ
ページへ戻る
履歴
リンク元
印刷
PHP >= 5.2.10 + APC での session_set_save_handler() 問題の解決法
のソース
UsersWiki
:
nao-pon
/
blog
/
2010-04-10
のソース
差分
を表示
nao-pon/blog/2010-04-10
へ行く。
#navi RIGHT:&rsslink(../); #boxdate * PHP >= 5.2.10 + APC での session_set_save_handler() 問題の解決法 [#f0628cab] RIGHT:&tag(PHP,自宅サーバー,APC); このページの以前の内容は間違いでした。(2011-10-21 追記) ** 正解は次のような感じです。 [#u1550648] -- セッションのカスタムハンドラでオブジェクトを使用している時にセッションが保存されない場合は、カスタムハンドラオブジェクトのデストラクタで session_write_close() を コールする。 -- [[PHP: session_set_save_handler - Manual:http://www.php.net/manual/ja/function.session-set-save-handler.php]] > PHP 5.0.5 以降、write ハンドラおよび close ハンドラはオブジェクトが破棄されたあとにコールされます。 そのため、セッション内でデストラクタを使用可能ですが、 ハンドラ内ではオブジェクトを使用できません。 ~この「ニワトリが先かタマゴが先か」の問題を解決するために、 デストラクタから session_write_close() を コールすることが可能です。 < -- XOOPS 2 の場合、kernel/session.php の XoopsSessionHandler クラスにデストラクタを追加することで APC 使用時も問題なくセッションが使えるようになる。 --- #code(php,nonumber){{ // for PHP >= 5.0.5 function __destruct() { session_write_close(); } }} ** 以下は当時の記事で間違った対応策。 [#z41a23a2] 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風味? - ひとりでもグループ:http://asakura.g.hatena.ne.jp/asakura-t/20091104/1257325821]] -- 終了処理の順番が問題らしい。PHP5.2.10 以降では、スクリプト終了時のセッションの終了処理の前にエクステンションの終了処理(PHP_RSHUTDOWN)が実行されるようになったらしい。 ~なので、APCの終了処理で、セッションハンドラーオブジェクトが破棄されてしまいセッションの書き込み処理が行われないという状況になっていた模様。 - [[徒然と: pecl-APCとphp-5.2.10:http://blogs.dion.ne.jp/gisupeke/archives/8914112.html]] -- このページに上記の問題を解決する方法そのものがバッチリ紹介されていた。 -- その方法: APC の終了処理を PHP_RSHUTDOWN から ZEND_MODULE_POST_ZEND_DEACTIVATE_N に変更する。 :ok: #code(diff,nonumber){{{{ --- 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: *** その他の参考ページ [#ncba5698] -[[PHP :: Bug #48787 :: session_set_save_handler: can't find previously included class in write func:http://bugs.php.net/bug.php?id=48787]] -[[PECL :: Bug #16721 :: Fatal Error: Class xxx not found:http://pecl.php.net/bugs/bug.php?id=16721]] -[[PECL :: Bug #16745 :: APC causes object destruction / session writing timing behavior to change:http://pecl.php.net/bugs/bug.php?id=16745]] -[[PHP: zend_module 構造体 - Manual:http://www.php.net/manual/ja/internals2.structure.modstruct.php]] RIGHT:&font(90%){&page_comments;}; #navi
nao-pon/blog/2010-04-10 のバックアップソース(No. All)
現: 2010-04-11 (日) 00:15:49
nao-pon
間違い訂正。 at 2011-10-21 (金) 22:33:17
ぺージ情報
ぺージ名 :
nao-pon/blog/2010-04-10
ページ別名 :
未設定
ページオーナー :
nao-pon
閲覧可
グループ :
すべての訪問者
ユーザー :
すべての訪問者
編集可
グループ :
なし
ユーザー :
ゲスト
Counter: 519, today: 1, yesterday: 0
メインメニュー
ホーム
価格比較 百貨
UsersWiki
新規ページ作成
最新ページ一覧
全ページ一覧
全コメント一覧
ヘルプ
» 関連ページ
» 記述を見る
» 変更点を見る
» バックアップ一覧
» 添付ファイル一覧
» リンク元一覧
xpwiki
お問い合わせ
ファイルマネージャー
ログイン
ユーザー名:
パスワード:
パスワード紛失
|
新規登録
最近の更新
#recent(): You called me too much
オンライン状況
634 人のユーザが現在オンラインです。 (14 人のユーザが UsersWiki を参照しています。)
登録ユーザ: 0
ゲスト: 634
もっと...
サイト情報