php session保存到memcache或者memcached中

时间:2023-03-10 03:01:05
php session保存到memcache或者memcached中

本教程叫你如何将php 的session存储在 memcached中,参考了好多网页,发现错误百出,最后自己还是测试成功了,现在将结果结果分享。

1-)系统环境 : elastix2.4 (centos5.9 x86_64) ,其中php版本是古董级的 php 5.1.6

这里要说明的是:php的版本和安装php的memcached扩展有相当大的关系。

2-)安装memcached server端程序,如下:

[root@elastix82 ~]# yum -y install memcached
[root@elastix82 ~]# rpm -qa|grep memcache
libmemcached-0.31-1.1.el5
memcached-1.4.5-1.el5
libmemcached-0.31-1.1.el5
libmemcached-devel-0.31-1.1.el5
libmemcached-devel-0.
不需要任何配置,启动memcached服务器进程
[root@elastix82 ~]# /etc/init.d/memcached start
Starting memcached:                                        [  OK  ]
[root@elastix82 ~]#
[root@elastix82 ~]# lsof -i:11211
COMMAND     PID      USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
memcached 28227 memcached   26u  IPv4 536953      0t0  TCP *:11211 (LISTEN)
memcached 28227 memcached   27u  IPv4 536956      0t0  UDP *:11211
[root@elastix82 ~]#

3-)给centos5.9自带的php安装 memcached扩展
参考了如下网站:
http://pecl.php.net/package/memcached
下面几个是参考方法,其实都有错误:
http://koda.iteye.com/blog/466667
http://imysql.cn/node/215
下面是排错参考网站:
http://cn2.php.net/manual/zh/book.memcache.php
http://sndapk.blog.51cto.com/5385144/945441
http://*.com/questions/4057777/php-cant-find-save-handler-memcache

总之参考网上乱七八糟的方法,发现网上流传的方法存在如下bug:
1)网上大多是说,修改php.ini如下后即可以实现 session存入memcached中,
session.save_handler = memcache   【有错误,具体情况具体写法】
session.save_path = "tcp://127.0.0.1:11211"
其实,据我搜资料,有一个叫memcache和memcached的扩展,我成功测试的是在官网上下载的memcached这个扩展,
http://pecl.php.net/package/memcached
所以我的 session.save_handler = memcached ,而不是网上前篇一律的 session.save_handler = memcache。否则,从apache的错误访问日志中可以看到如下:
[root@elastix82 html]# tailf /var/log/httpd/error_log
[Fri Sep 13 15:25:35 2013] [error] [client 192.168.1.79] PHP Warning:  session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot find save handler memcache in /var/www/html/ss.php on line 2
[Fri Sep 13 15:26:47 2013] [notice] caught SIGTERM, shutting down
原因是,不认识 memcache 这个 handler。
2) 强烈鄙视网上抄袭来抄袭去的,不负责任的教程。搜了好多好多相关文章,几乎没有一篇说过实现这个功能需要php安装memcach或者memcached扩展,都仅仅只是说了要修改php.ini的两行而已。本人在这里强调一次,要实行php session存入memcached,需要添加php的memcached扩展,扩展下载地址为:
http://pecl.php.net/package/memcached
3) 在安装php的memcached扩展过程中,还是件头疼的事情,原因后来找到了——高版本的memcached不在支持以前老版本的php,比如我的就是php 5.1.6 ,古董级了。后来我硬是下了3个版本的memcached,才把它装上。我用的版本是 memcached-0.1.4 ,其它两个高版本无法安装上。官网也给出了说明,需要php version > 5.2
[root@elastix82 session]# ls
memcached-0.1.4  memcached-0.1.4.tgz  memcached-1.0.2  memcached-1.0.2.tgz  memcached-2.1.0  memcached-2.1.0.tgz
[root@elastix82 session]#
4) 扩展安装方法:
可能编译用到如下库
[root@elastix82 ~]# yum -y install libmemcached libmemcached-devel
剩下的 就是 phpize 和 ./configure --with-php-config=/usr/bin/php-config ,以及复制*.so 到 php的modules/目录,并修改php.ini ,最后phpinfo结果如下:
[root@elastix82 ~]# php --info |grep -i memcache
memcached
memcached support => enabled
libmemcached version => 0.31
Registered save handlers => files user memcached
session.save_handler => memcached => memcached
[root@elastix82 ~]#

4-)安装完成后重启apache,一切ok。收工!