1、构建session抽象类,实现Session_set_save_hanlder函数必须的基础函数

<?php
/* 实现session利用文件形式或者数据库等其它形式进行存储操作
* author:Libin
* Data:2014-06-24
* 抽象顶层
*/
abstract class session {
/* open::设置存储路径 */
abstract public function open();
/* close::关闭存储模式句柄 */
abstract public function close();
/* read::根据key查询对应的value,典型的键值对 */
abstract public function read($key);
/* write::写session */
abstract public function write($key,$value);
/* destory::销毁某key的session */
abstract public function destory($key);
/* gc::回收机制,清除过期指定时间(分钟)session数据 */
abstract public function gc($min = 0);
/* start::开启session方法重写 */
abstract public function start();
}
?>

2、编写txt文本模式具体方法实现类

<?php
/* 实现session利用文件形式或者数据库等其它形式进行存储操作
* author:Libin
* Data:2014-06-24
* 文本(txt)实现方法
*/
class session_txt extends session { /* 变量存储 */
private $save_path = '';//session保存路径
private $file_path = '';//session文件路径
private $save_name = '';//session命名
private $save_hand = null;//资源句柄
private $save_prefix = 'mysession_';//session前缀 /* open::设置存储路径 */
final public function open(){
$this->save_path = 'D:\session';
if(!is_dir($this->save_path)){
if(!mkdir($this->save_path)){
return false;
};
}
$this->gc();//启用回收机制
return true;
}
/* close::关闭存储模式句柄 */
final public function close(){
return true;
}
/* read::根据key查询对应的value,典型的键值对 */
final public function read($key){
$this->set(__function__,$key);
$data = @fread($this->save_hand,filesize($this->file_path));
if(empty($data) || $data == ''){
return '';
}return $data;
}
/* write::写session */
final public function write($key,$value){
$this->set(__function__,$key);
return @fwrite($this->save_hand,$value);
}
/* destory::销毁某key的session */
final public function destory($key){
$this->set(__function__,$key);
return @unlink($this->file_path);
}
/* gc::回收机制,清除过期指定时间(分钟)session数据 */
final public function gc($min = 10){
$hand = @opendir($this->save_path);//打开文件夹
while($file = @readdir($hand)){//遍历文件夹
if(is_file($this->save_path.'/'.$file)){//如果为文件,排除.||..
$fileatime = fileatime($this->save_path.'/'.$file);//获取文件最后修改时间
if(((time() - $fileatime) / 60) > $min){//如果时间相差大于$min分钟
unlink($this->save_path.'/'.$file);//执行文件清理功能
}
}
}
return true;
} ################################################################################# /* MAGIC __SET */
final public function __set($key,$value){
$this->$key = $value;
return true;
} /* 获取存储句柄 */
final private function set($mode = 'read',$key){
$this->file_path = $this->save_path.'/'.$this->save_prefix.$key;//设置文件路径
if($mode != 'read' && $mode != 'write'){return false;};
$mode = $mode == 'write' ? 'w' : 'r';//读或写
$this->save_hand = @fopen($this->file_path,$mode);
} /* start::开启session方法重写 */
final public function start(){
@session_set_save_handler(array($this,'open'),array($this,'close'),array($this,'read'),array($this,'write'),array($this,'destory'),array($this,'gc'));
ob_start();
session_start();
ob_end_flush();
}
}
?>

3、引入session.php,实现工厂模式最后一步

<?php
/* 实现session利用文件形式或者数据库等其它形式进行存储操作
* author:Libin
* Data:2014-06-24
* 工厂模式
*/
class _session_start {
/* 构造函数 */
static public function __start($mode = 'txt'){
require_once('session.class.php');//加载抽象方法
if(!require_once('function/'.$mode.'.php')){
return false;
}else{
$session_handle = 'session_'.$mode;
$handler = new $session_handle();
$handler->start();
}
}
}
_session_start::__start('txt');//重写session函数开始
?>

PS::明儿个编写mysql实现此功能,今天就到此为止啦啦啦!

Session_set_save_handler 之 文本模式实现的更多相关文章

  1. ubuntu文本模式/终端中文乱码解决

    ubuntu文本模式/终端中文乱码解决 1.Alt+Ctrl+F1 进入第一个终端tty1,发现中文乱码. 2.安装zhcon. sudo apt-get install zhcon3 输入下面命令, ...

  2. 设置IE默认文本模式的方法

    设置IE默认文本模式的方法 <meta http-equiv="X-UA-Compatible" content="IE=8" /> IE=5.6. ...

  3. Prefab强制使用文本模式

    [Prefab强制使用文本模式] Edit -> ProjectSetting -> Editor:

  4. 【python cookbook】【字符串与文本】4.文本模式的匹配和查找

    问题:按照特定的文本模式进行匹配或查找 解决方法: 1.简单的文字匹配,只需使用str.find().str.startswith().str.endswith()或类似的函数即可: 2.复杂的匹配, ...

  5. jsp页面在IE8下文本模式自动为“杂项(Quirks)”导致页面显示错位

    最近在修改网站的响应式的页面时,由于都是套样式页面,修改过程都是粘贴复制,导致了一些细节问题在IE8下暴露出来: 遇到的问题就是在在Chrome,火狐页面都正常,唯独在IE8下页面样式显示乱样了,但是 ...

  6. Linux中图形界面和文本模式相互切换

    1.默认开机进入文本模式 如果想让开机自动进纯文本模式, 修改/etc/inittab 找到其中的 id:5:initdefault: 这行指示启动时的运行级是5,也就是图形模式 改成3就是文本模式了 ...

  7. IE8"开发人员工具"使用详解下(浏览器模式、文本模式、JavaScript调试、探查器)

    来源: http://www.cnblogs.com/JustinYoung/archive/2009/04/03/kaifarenyuangongju2.html 在上一篇文章IE8“开发人员工具” ...

  8. 鸟哥的linux私房菜学习-(三)X Window与文本模式的切换

    通常我们也称文本模式为终端机接口, terminal 或 console喔!Linux默认的情况下会提供六个Terminal来让使用者登陆, 切换的方式为使用:[Ctrl] + [Alt] + [F1 ...

  9. Intellij IDEA xxx.properties变成纯文本模式解决方案

    今天在创建xxx.properties的时候不知道按到了哪里,结果让它编程了纯文本模式,重命名这个文件或者删掉,重新创建这个同名文件,换一个项目,始终是文本文件类型,就估计不是项目问题,是intell ...

随机推荐

  1. ArcGIS Server 10.2 实战(三)图层标注及图例中文显示乱码的解决

    发布的图层中不可避免的使用到中文来标注,默认设置下,ArcGIS Server不支持中文的,中文标注显示成乱码,主要是编码的问题,需要把手动把编码改为UTF-8. ArcGIS Server 10.2 ...

  2. 关于 VS2012 创建 MVC4 Empty 项目的一个小问题

    今天下午发现一个新建的项目工作异常,主要表现为应该返回JSON的Action没有返回JSON字符串,而是返回了JsonResult的对象名,即字符串“System.Web.Mvc.JsonResult ...

  3. javascript一些常用操作

    一:验证日期 1:日期必须满足yyyy-MM-dd格式 2:日期必须是合法的日期,如2016-02-30就是不存在 //验证就诊日期 function checkVisitDate(date){ va ...

  4. Zabbix Api的使用

    API使用 zabbix官网文档:https://www.zabbix.com/documentation/2.2/manual/api, Zabbix API是基于JSON-RPC 2.0规格,具体 ...

  5. P6Spy 、 SQL Profiler

    P6Spy 在优化Hibernate性能的时候,很重要的一点就是要看到Hibernate底层执行的SQL 虽然通过打印日志配合Hibernate的show_sql属性能够拼凑出Hibernate底层执 ...

  6. const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...

  7. 约瑟夫环(N个人围桌,C语言,数据结构)

    约瑟夫环问题(C语言.数据结构版) 一.问题描述 N个人围城一桌(首位相连),约定从1报数,报到数为k的人出局,然后下一位又从1开始报,以此类推.最后留下的人获胜.(有很多类似问题,如猴子选代王等等, ...

  8. SharpZipLib 压缩后传输给第三方平台无法识别问题

    问题描述:在项目中需要将文件压缩然后传输给三方进行彩信发送,使用SharpZipLib 进行压缩,原先使用J#进行压缩处理,但是用SharpZipLib压缩后的zip文件传输过去之后,总会报发送失败. ...

  9. [求助]谁能给我讲解一下,iOS编程要如何实时显示采集到的图像???

    rt,最近搞一个高清图传,本着自(bu)主(mai)创(da)新(jiang)的原则,打算利用手中的iPad当作辅助飞行屏幕,USB传输数据.再说某疆图传7999(还只支持自家云台录像拍照),哪是我这 ...

  10. opencv 手写选择题阅卷 (三)训练分类器

    opencv 手写选择题阅卷 (三)训练分类器 1,分类器选择:SVM 本来一开始用的KNN分类器,但这个分类器目前没有实现保存训练数据的功能,所以选择了SVN分类器; 2,样本图像的预处理和特征提取 ...