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 ...
随机推荐
- jar包冲突解决方法
import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Enumerati ...
- github/hexo搭建个人博客几个问题总结
问题一:hexo ERROR Deployer not found: github or hexo ERROR Deployer not found: git npm install hexo-dep ...
- const 指针与指向const的指针
最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...
- Lombok(1.14.8) - @Synchronized
@Synchronized @Synchronized,实现同步. package com.huey.lombok; import java.util.Date; import lombok.Sync ...
- Spring与Hibernate整合之通用Dao的实现
在上一篇文章中写了如何直接利用HibernateTemplate进行数据库操作,但在一般的项目中很少直接得到HibernateTemplate的Bean对象从而操作数据库的,下面就简要介绍一下实现通用 ...
- 腾讯QQ群数据下载方法(7000万个qq群资料全泄漏)
仔细读完一定能找到自己需要的东西 据新华网报道,国内知名安全漏洞监测平台乌云20日公布报告称,腾讯QQ群关系数据被泄露,网上可以轻易就能找到数据下载链接,根据这些数据,通过QQ号可以查询到备注姓名.年 ...
- lstm-思想
RNN(Recurrent Neural Network) 今天我这里讲到的RNN主要是上图这种结构的,即是Hidden Layer会有连向下一时间Hidden Layer的边,还有一种结构是Bidi ...
- 删除织梦所有待审核稿件sql语句
先提醒一下 archives是dedecms主表addonarticle 新闻信息表 在dede后台"系统->SQL命令行工具"运行下以命令即可(注意,运行后未审核的数据全被 ...
- C++转到C#历程零基础知识(持续增加)
1.命名空间.类和源文件的关系:几个源文件用同一个命名空间时候,那么这几个源文件中的各个类之间的调用时可行的.他不会根据你的源文件分离而分开,因为最终编译后生成的是dll,这里来看你的几个源文件是没有 ...
- Git 的简单使用
一直在使用Git,仅限于简单的使用,但还是记不住几个简单.在这边总结一下,加深印象,也方便查找. 安装Git 平常主要在windows和ubuntu上工作,就以windows为例,Linux和Mac平 ...