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 ...
随机推荐
- 对x264_macroblock_cache_load的理解
X264版本: 2004/06/03 函数作用: 将编码该宏块所需的信息加载到mb.pic.mb.cache两个结构体中,记录相邻宏块的存在性. 函数过程: 初始化坐标信息,这些坐标信息将在下面用作下 ...
- SQL Server 格式化时间format
select format(sysdatetime(),'yyyy-MM-dd HH:mm:ss'); SQL Server 2012才开始有这功能 这种样式很像oracle的to_char(sysd ...
- [转]Web性能监控自动化探索之路–初识WebPageTest
本文转自:http://www.webryan.net/2013/01/use-webpagetest-to-analyze-web-performance/ 无论是从Velocity 2012还是在 ...
- bootstrap的滚动监听
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...
- html css中id和class的区别比较
在定义样式的时候,有时候会将id和class的用法弄混淆,所以在这里特意说明一下: id和class属性是网页中两个通用的属性,它们协同工作使整个页面变得丰富多彩.当我们为一个元素定义样式时.可以使用 ...
- 如何更好的理解(pageX,pageY,clientX,clientY,eventX,eventY,scrollX,scrollY,screenX,screenY,event.offsetX,event.offsetY,offsetLeft,style.left)
1 pageX,pageY:鼠标指针相对于当前窗口的X,Y坐标,计算区域包括窗口自身的控件和滚动条.(火狐特有) 2 event.clientX,event.clientY:鼠标指针相对于当前窗口的X ...
- sql常识-Join
SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表 ...
- Java之绘制实例
前面已经介绍过绘制方法. 弧形的绘制: package com.caiduping; import java.awt.Graphics; import javax.swing.JFrame; impo ...
- Android之标签选项卡
TabWidget可以通过不同的标签进行切换并且显示不同的内容,相当于Button按钮实现不同的功能. TabHost的布局: (1):我们先在Layouts拖一个Vertical(纵向视图)的Lin ...
- 如何设置Win7系统中的上帝模式GodMode(转载)
如何设置Win7系统中的上帝模式GodMode(转载) NT6系统中隐藏了一个秘密的“GodMode”,字面上译为“上帝模式”.God Mode其实就是一个简单的文件夹窗口,但包含了几乎所有系统的设置 ...