51qsx 发表于 2015-8-31 10:25:44

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端程序,如下:
  # yum -y install memcached
# 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服务器进程
# /etc/init.d/memcached start
Starting memcached:                                       
#
# lsof -i:11211
COMMAND   PID      USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
memcached 28227 memcached   26uIPv4 536953      0t0TCP *:11211 (LISTEN)
memcached 28227 memcached   27uIPv4 536956      0t0UDP *:11211
#
  
  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.iyunv.com/5385144/945441
http://stackoverflow.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的错误访问日志中可以看到如下:
# tailf /var/log/httpd/error_log
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
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
# ls
memcached-0.1.4memcached-0.1.4.tgzmemcached-1.0.2memcached-1.0.2.tgzmemcached-2.1.0memcached-2.1.0.tgz
#
4) 扩展安装方法:
可能编译用到如下库
# yum -y install libmemcached libmemcached-devel
剩下的 就是 phpize 和 ./configure --with-php-config=/usr/bin/php-config ,以及复制*.so 到 php的modules/目录,并修改php.ini ,最后phpinfo结果如下:
# php --info |grep -i memcache
memcached
memcached support => enabled
libmemcached version => 0.31
Registered save handlers => files user memcached
session.save_handler => memcached => memcached
#
4-)安装完成后重启apache,一切ok。收工!
页: [1]
查看完整版本: php session保存到memcache或者memcached中