[李景山php]thinkphp核心源码注释|Apachenote.class.php
2016-07-22 09:23
573 查看
<?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"; // 返回 运算结果 } // 总结,作为一个缓存系列的文件 // 函数设计的很实在 初始化 // 单列设置 连接 // 关闭连接 // 获取、 设置、 删除, // 就可以了, }
相关文章推荐
- Apache的配置文件,使用了自己的目录,添加了别名的使用
- Apache2.4虚拟主机+别名配置
- (转载)Windows 上搭建Apache FtpServer
- 【linux】ubantu下Apache无法启动(80端口被占用)
- 关于Xutils框架出现无法访问HttpRequestBase 找不到org.apache.http.client.methods.H...
- Apache POI的小测试
- Linux下安装Apache Openssl
- 二:apache的Qpid消息中间件介绍
- python 计算apache进程占用的内存大小以及占物理内存的比例
- ubuntu下apache2 SSL证书部署
- Apache Log4j配置说明
- [Doc ID 1590988.1]如何清理E-Business Suite的缓存(Apache/iAS, Cabo, Modplsql, Browser, Jinitiator, Java, Portal, WebADI)?
- Apache Shiro学习笔记(二)身份验证源码分析
- java cxf org.apache.cxf.interceptor.Fault: Unmarshalling Error: null
- 伪静态URLRewrite学习笔记
- CGI、FastCGI、CLI、Apache、ISAPI之PHP运行环境对比
- apache本地多端口配置
- 重启Mac上的Apache服务命令
- Mac OS X中配置Apache
- Apache + SVN + Linux