Session_set_save_handler 之 文本模式实现
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 之 文本模式实现的更多相关文章
- ubuntu文本模式/终端中文乱码解决
ubuntu文本模式/终端中文乱码解决 1.Alt+Ctrl+F1 进入第一个终端tty1,发现中文乱码. 2.安装zhcon. sudo apt-get install zhcon3 输入下面命令, ...
- 设置IE默认文本模式的方法
设置IE默认文本模式的方法 <meta http-equiv="X-UA-Compatible" content="IE=8" /> IE=5.6. ...
- Prefab强制使用文本模式
[Prefab强制使用文本模式] Edit -> ProjectSetting -> Editor:
- 【python cookbook】【字符串与文本】4.文本模式的匹配和查找
问题:按照特定的文本模式进行匹配或查找 解决方法: 1.简单的文字匹配,只需使用str.find().str.startswith().str.endswith()或类似的函数即可: 2.复杂的匹配, ...
- jsp页面在IE8下文本模式自动为“杂项(Quirks)”导致页面显示错位
最近在修改网站的响应式的页面时,由于都是套样式页面,修改过程都是粘贴复制,导致了一些细节问题在IE8下暴露出来: 遇到的问题就是在在Chrome,火狐页面都正常,唯独在IE8下页面样式显示乱样了,但是 ...
- Linux中图形界面和文本模式相互切换
1.默认开机进入文本模式 如果想让开机自动进纯文本模式, 修改/etc/inittab 找到其中的 id:5:initdefault: 这行指示启动时的运行级是5,也就是图形模式 改成3就是文本模式了 ...
- IE8"开发人员工具"使用详解下(浏览器模式、文本模式、JavaScript调试、探查器)
来源: http://www.cnblogs.com/JustinYoung/archive/2009/04/03/kaifarenyuangongju2.html 在上一篇文章IE8“开发人员工具” ...
- 鸟哥的linux私房菜学习-(三)X Window与文本模式的切换
通常我们也称文本模式为终端机接口, terminal 或 console喔!Linux默认的情况下会提供六个Terminal来让使用者登陆, 切换的方式为使用:[Ctrl] + [Alt] + [F1 ...
- Intellij IDEA xxx.properties变成纯文本模式解决方案
今天在创建xxx.properties的时候不知道按到了哪里,结果让它编程了纯文本模式,重命名这个文件或者删掉,重新创建这个同名文件,换一个项目,始终是文本文件类型,就估计不是项目问题,是intell ...
随机推荐
- CentOS(八)--crontab命令的使用方法
crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. 在 ...
- 给jdk写注释系列之jdk1.6容器(6)-HashSet源码解析&Map迭代器
今天的主角是HashSet,Set是什么东东,当然也是一种java容器了. 现在再看到Hash心底里有没有会心一笑呢,这里不再赘述hash的概念原理等一大堆东西了(不懂得需要先回去看下Has ...
- Mina的线程模型
在Mina的NIO模式中有三种I/O工作线程(这三种线程模型只在NIOSocket中有效,在NIO数据包和虚拟管道中没有,也不需要配置): IoAcceptor/IoConnector线程 IoPro ...
- http状态代码含义表
100 - 表示已收到请求的一部分,正在继续发送余下部分. 101 - 切换协议. 2xx - 成功.服务器成功地接受了客户端请求: 200 - 确定.客户端请求已成功. 201 - 已创建. 202 ...
- Ajax返回html和json格式数据
Ajax可以返回text和xml格式 可以用Ajax返回大段的html文本和json格式的字符串,然后用eval()方法 转化为json对象 php中的json编码:json_encode(); ph ...
- Nginx - Events Module
The Events module comes with directives that allow you to configure network mechanisms. Some of the ...
- nginx限制ip请求次数 以及并发次数
如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候.其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见 ...
- C语言sprintf与sscanf函数[总结]
sprintf函数 sprintf函数原型为 int sprintf(char *str, const char *format, ...).作用是格式化字符串,具体功能如下所示: (1)将数字变量转 ...
- Java之绘制实例
前面已经介绍过绘制方法. 弧形的绘制: package com.caiduping; import java.awt.Graphics; import javax.swing.JFrame; impo ...
- String.IsNullOrWhiteSpace和String.IsNullOrEmpty的区别
以前刚入行的时候判断字符串的时候用 string a="a"; a==""; a==null; 后来发现了String.IsNullOrEmpty感觉方便了好多 ...