ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/branches/ebihara/prj_memcached/memcacheSession.php @ 3142

Last change on this file since 3142 was 3142, checked in by ebihara, 12 years ago

[1億PVプロジェクト]トピックに投稿されていたコードを取り込み

File size: 4.7 KB
Line 
1<?php
2/*****************************************************************************
3//
4// PHP MemCached Session Handler on memcache API
5//
6// Copyright ( C ) 2006 dozo, http://dozo.matrix.jp/pear/
7//
8// This program is free software; you can redistribute it and/or
9// modify it under the terms of the GNU General Public License
10// as published by the Free Software Foundation; either version 2
11// of the License, or ( at your option ) any later version.
12//
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21//
22// *****************************************************************************/
23
24/*
25 * memcacheSession class
26 *  Memcached session save handler main class.
27 *  It can use that set session.save_path your memcached hostname or ipaddress and require this file.
28 *
29 * <code>
30 *  ini_set("session.save_path", "localhost");
31 *  require_once("memcacheSession.php");
32 * </code>
33 *
34 * @Auther dozo
35 *
36 */
37
38class memcacheSession extends Memcache
39{
40    /*
41     *  memcached default host
42     *
43     * @access private
44     *
45     * @var string
46     */
47    var $sessionPath = "";
48
49    /*
50     *  session name
51     *
52     * @access private
53     *
54     * @var string
55     */
56    var $sessionName = "";
57
58
59    /*
60     *  constructor
61     *
62     * @access protected
63     */
64    function __construct()
65    {
66        session_set_save_handler(
67            array( & $this, "open" ), 
68            array( & $this, "close" ), 
69            array( & $this, "read" ), 
70            array( & $this, "write" ), 
71            array( & $this, "destroy" ), 
72            array( & $this, "gc" )
73        );
74    }
75
76    /*
77     *  destructor
78     *
79     * @access protected
80     */
81    function __destruct()
82    {
83        ;
84    }
85
86    /*
87     *  constructor
88     *
89     * @access protected
90     */
91    function memcacheSession()
92    {
93        $this->__construct();
94    }
95    /*
96     *  singleton
97     *
98     * @access private
99     */
100    function &singleton()
101    {
102        static $instance;
103        if (!isset($instance)) $instance = null;
104
105        if (!is_object($instance)) {
106            $instance = &memcacheSession::_factory();
107//            $instance->addServer("localhost");
108//            $instance->addServer("127.0.0.1");
109        }
110
111        return $instance;
112    }
113   
114    /*
115     *  factory
116     *
117     * @access private
118     */
119    function & _factory()
120    {
121        $memsessObj = new memcacheSession();
122
123        return $memsessObj;
124    }
125    /*
126     *  add Server over ride
127     *
128     * @access public
129     */
130//    function addServer( $host = "", $port = 11211, $persistent = true, $timeout = 1 )
131//    {
132//    }
133   
134    /**
135     *  open memcached session save handler
136     *
137     * @access private
138     *
139     * @param   string  $save_path  memcached host name . If it don't setting server paramater, it's use configuration option "session.save_path".
140     * @param   string  $session_name   session name
141     *
142     * @return bool true
143     */
144    function open($save_path, $session_name) 
145    {
146//        print_r( $this->getVersion() );
147//        if(  ){
148//            $this->addServer( $sess_save_path );
149//        }
150        $this->sessionPath = $save_path;
151        $this->sessionName = $session_name;
152       
153        $this->addServer( $this->sessionPath );
154        $this->pconnect( $this->sessionPath );
155       
156        return true;
157    }
158
159    function close() 
160    {
161        return(true);
162    }
163
164    function read( $id ) 
165    {
166        if ( $sess_data = $this->get( $id ) ) 
167            return $sess_data;
168        else 
169            return(""); // Must return "" here.
170    }
171
172    function write( $id, $sess_data ) 
173    {
174        if( trim( $id ) == "" ) return 1;
175       
176        $session_life_time = ini_get("session.gc_maxlifetime");
177       
178        return $this->set( $id, $sess_data, 0, $session_life_time );
179    }
180
181    function destroy( $id ) 
182    {
183        return $this->delete( $id  );
184    }
185
186    /*********************************************
187     * WARNING - You will need to implement some *
188     * sort of garbage collection routine here.  *
189     *********************************************/
190    function gc($maxlifetime) 
191    {
192        return true;
193    }
194
195}
196
197memcacheSession::singleton();
198
199?>
Note: See TracBrowser for help on using the repository browser.