[李景山php]thinkphp核心源码注释|Apachenote.class.php
来源:互联网 发布:淘宝直通车点击 编辑:程序博客网 时间:2024/06/17 13:04
<?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]// +----------------------------------------------------------------------// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: liu21st <liu21st@gmail.com>// +----------------------------------------------------------------------namespace Think\Cache\Driver;use Think\Cache;defined('THINK_PATH') or exit();/** * Apachenote缓存驱动 */// 乍一看,没搞懂// so 百度了一下,// apache_note — 取得或设置 apache 请求记录class Apachenote extends Cache { /** * 架构函数 * @param array $options 缓存参数 * @access public */ // 初始化,初始化配置,然后开启缓存。 public function __construct($options=array()) { if(!empty($options)) { // 重置选项 $this->options = $options; } if(empty($options)) { // 否则设置默认选项 $options = array ( 'host' => '127.0.0.1', 'port' => 1042, 'timeout' => 10, ); } $this->options = $options; $this->options['prefix'] = isset($options['prefix'])? $options['prefix'] : C('DATA_CACHE_PREFIX'); $this->options['length'] = isset($options['length'])? $options['length'] : 0; $this->handler = null; $this->open(); } /** * 打开缓存 * @access private */ private function open() { if (!is_resource($this->handler)) { // 这个函数是个好函数,is_resource $this->handler = fsockopen($this->options['host'], $this->options['port'], $_, $_, $this->options['timeout']); } // fsockopen — 打开一个网络连接或者一个Unix套接字连接 // 初始化一个套接字连接到指定主机(hostname)。 } //////////////////////////////// 明日继续 /** * 关闭缓存 * @access private */ private function close() { // 弱弱的关闭连接 打开方式是 fsockopen fclose($this->handler); $this->handler = false; } /** * 读取缓存 * @access public * @param string $name 缓存变量名 * @return mixed */ // 获取远程 缓存文件 public function get($name) { $this->open(); // 打开连接 $name = $this->options['prefix'].$name; // 设置连接名字 $s = 'F' . pack('N', strlen($name)) . $name; // 组合真正的连接名字 // pack() 函数把数据装入一个二进制字符串。 fwrite($this->handler, $s); // 写入连接 for ($data = ''; !feof($this->handler);) { $data .= fread($this->handler, 4096); }// 读取其连接 N('cache_read',1); // 进行步进统计 $this->close();// 关闭连接 return $data === '' ? '' : unserialize($data); // 返回数据 }// 好的,感谢了,今日就到这里了。// 缓存最后一单 周末由于感冒 未能及时发布,周一补上,感谢各位! /** * 写入缓存 * @access public * @param string $name 缓存变量名 * @param mixed $value 存储数据 * @return boolean */ // 首先我们可以先不细读这个代码,一般情况下,遇到set 这个函数,就啥也不说了 // 设置其内部 不方便外人道的变量 public function set($name, $value) { N('cache_write',1);// 记录写 $this->open();// 开启连接句柄,单列就是这个好处,随从都可以开启,反而不消耗内存。牛叉!赞一个 $value = serialize($value);// 序列化 简直就是神器啊 $name = $this->options['prefix'].$name; // 防止重命名的一个 项目前缀也是比不可少的。 $s = 'S' . pack('NN', strlen($name), strlen($value)) . $name . $value; // pack 返回一个二进制的字符串,不知道,干什么用的。 fwrite($this->handler, $s); // 写入数据 $ret = fgets($this->handler); // 获取结果集 第一行 $this->close(); if($ret === "OK\n") {// 如果第一行是ok if($this->options['length']>0) { // 记录缓存队列 $this->queue($name); } return true; } return false; } /** * 删除缓存 * @access public * @param string $name 缓存变量名 * @return boolean */ // 删除文件 public function rm($name) { $this->open(); $name = $this->options['prefix'].$name; $s = 'D' . pack('N', strlen($name)) . $name; // 获取 fwrite($this->handler, $s); // 写入数据 $ret = fgets($this->handler);// 获取数据 $this->close(); // 关闭 return $ret === "OK\n"; // 返回 运算结果 } // 总结,作为一个缓存系列的文件 // 函数设计的很实在 初始化 // 单列设置 连接 // 关闭连接 // 获取、 设置、 删除, // 就可以了,}
0 0
- [李景山php]thinkphp核心源码注释|Apachenote.class.php
- [李景山php]thinkphp核心源码注释|View.class.php
- [李景山php]thinkphp核心源码注释|Think.class.php
- [李景山php]thinkphp核心源码注释|Template.class.php
- [李景山php]thinkphp核心源码注释|Storage.class.php
- [李景山php]thinkphp核心源码注释|Route.class.php
- [李景山php]thinkphp核心源码注释|Model.class.php
- [李景山php]thinkphp核心源码注释|Log.class.php
- [李景山php]thinkphp核心源码注释|Hook.class.php
- [李景山php]thinkphp核心源码注释|DB.class.php
- [李景山php]thinkphp核心源码注释|Controller.class.php
- [李景山php]thinkphp核心源码注释|Cache.class.php
- [李景山php]thinkphp核心源码注释|Build.class.php
- [李景山php]thinkphp核心源码注释|App.class.php
- [李景山php]thinkphp核心源码注释|Disaptcher.class.php
- [李景山php]thinkphp核心源码注释|Taglib.class.php
- [李景山php]thinkphp核心源码注释|Cx.class.php
- [李景山php]thinkphp核心源码注释|Html.class.php
- Divisibility
- dumpdecrypted砸壳
- spark快速入门与WordCount程序机制深度解析 spark研习第二季
- 【POJ】[1006]Biorhythms
- 设计模式之观察者模式
- [李景山php]thinkphp核心源码注释|Apachenote.class.php
- spring配置事务处理的五种方式
- 基于双卡尔曼滤波算法的电池SOC估计
- 安装Vm12
- Ubuntu下配置Eclipse调试环境
- thingking in java2.11练习(3)
- HDU1397 POJ2909 UVA686 UVALive5674 Goldbach's Conjecture(II)
- HDU2818加权并查集
- QTableWidget的用法总结