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. DisableExplicitGC和Direct ByteBuffer

    直接堆外内存请参见:http://blog.csdn.net/lantian0802/article/details/39257087 JVM调优请参见:http://hllvm.group.itey ...

  2. hdu 4669 动态规划

    思路:主要就是一个动态方程dp[now][(j*Exp[len[num[i]]]+num[i])%k]+=dp[pre][j];我用的是滚动数组.其实也就是dp[i][(j*Exp[len[num[i ...

  3. 快速启动软件之 Rolan ,你真的会用?

    2015.2.14 很高兴 Rolan 这个软件至今还在更新,并且愈发完善,UI 的设计和功能上的改进都给了我不小的震撼. 如今的 Rolan ,可以对比一下 2014 年的图,变化真的很大有木有: ...

  4. PS基础学习 1---基本工具

    1,选框工具: 选择以后对选框中的内容进行修改 ① Shift + 选框 为正方形 ② 选中后鼠标放在选框中对选择范围进行拖动 ③ 移动工具可以拉着选框中的内容移动 ④ ctrl+D取消选框 ⑤单行选 ...

  5. 【Knockout】五、创建自定义绑定

    概述 除了上一篇列出的KO内置的绑定类型(如value.text等),你也可以创建自定义绑定. 注册你的binding handler ko.bindingHandlers.yourBindingNa ...

  6. HDOJ2021发工资咯:)

    发工资咯:) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  7. 检测SqlServer服务器内存是否瓶颈

    性能监视器临视以下数据: Memory->Available MBytes  可用的内存  windows系统不低于1G,如果可用内存不多,则系统要求sqlserver释放内存 Paging F ...

  8. asp.net C#数据导出Excel实例介绍

    excel导出在C#代码中应用己经很广泛了,我这里就做些总结,供自己和读者学习用. Excel知识点. 一.添加引用和命名空间 添加Microsoft.Office.Interop.Excel引用,它 ...

  9. C# 中控件 WebBrowser 对 frameset/ iframe 操作和内容获取

    1.获取frame的document HtmlDocument htmlDoc = webBrowser1.Document;  htmlDoc = webBrowser1.Document.Wind ...

  10. Microsoft.Practices.EnterpriseLibrary.Logging的使用

    翻译 原文地址:http://www.devx.com/dotnet/Article/36184/0/page/1  原文作者:Thiru Thangarathinam (好强大的名字) 翻译: fl ...