FLEAPHP框架的文件缓存系统
来源:互联网 发布:yum 安装mysql client 编辑:程序博客网 时间:2024/05/16 08:58
FLEAPHP框架使用文件缓存,主要是是为了它自带的数据库操作服务的,当然,开发者也可以利用它提供的API来进行一些简单的缓存操作。
注意到其中的一些实现细节:
摘取一个缓存文件的内容如下:
<?php die(); ?> 277145528a:5:{s:9:"REPORT_ID";a:12:{s:4:"name";s:9:"report_id";s:5:"scale";N;s:4:"type";s:3:"
int";s:9:"maxLength";s:2:"12";s:10:"simpleType";s:1:"R";s:7:"notNull";b:1;s:10:"primaryKey";b:0;s:13:"autoIncrement";b:1;s:6:"binary
";b:0;s:8:"unsigned";b:0;s:10:"hasDefault";b:0;s:11:"description";s:0:"";}s:9:"SITE_TYPE";a:12:{s:4:"name";s:9:"site_type";s:5:"scal
e";N;s:4:"type";s:7:"tinyint";s:9:"maxLength";s:1:"4";s:10:"simpleType";s:1:"I";s:7:"notNull";b:1;s:10:"primaryKey";b:0;s:13:"autoIn
crement";b:0;s:6:"binary";b:0;s:8:"unsigned";b:0;s:10:"hasDefault";b:0;s:11:"description";s:0:"";}s:8:"DESCRIBE";a:12:{s:4:"name";s:
8:"describe";s:5:"scale";N;s:4:"type";s:4:"text";s:9:"maxLength";i:-1;s:10:"simpleType";s:1:"X";s:7:"notNull";b:0;s:10:"primaryKey";
b:0;s:13:"autoIncrement";b:0;s:6:"binary";b:0;s:8:"unsigned";b:0;s:10:"hasDefault";b:0;s:11:"description";s:0:"";}s:5:"EMAIL";a:12:{
s:4:"name";s:5:"email";s:5:"scale";N;s:4:"type";s:7:"varchar";s:9:"maxLength";s:3:"255";s:10:"simpleType";s:1:"C";s:7:"notNull";b:0;
s:10:"primaryKey";b:0;s:13:"autoIncrement";b:0;s:6:"binary";b:0;s:8:"unsigned";b:0;s:10:"hasDefault";b:0;s:11:"description";s:0:"";}
s:7:"URL_MD5";a:12:{s:4:"name";s:7:"url_md5";s:5:"scale";N;s:4:"type";s:7:"varchar";s:9:"maxLength";s:2:"32";s:10:"simpleType";s:1:"
C";s:7:"notNull";b:1;s:10:"primaryKey";b:0;s:13:"autoIncrement";b:0;s:6:"binary";b:0;s:8:"unsigned";b:0;s:10:"hasDefault";b:0;s:11:"
description";s:0:"";}}
可以看到,该缓存文件的开头是die函数,这样,即使有人猜到了url,并且该url又允许访问,他也只不过得到一个die结果而已,不会获取到缓存的真正内容。
另外,当读取的时候,还做了hash判断:
$data = safe_file_get_contents($cacheFile);
$hash = substr($data, 16, 32);
$data = substr($data, 48);
if (crc32($data) != $hash || strlen($hash) != 32) {
return false;
}
由于做了校验,这样如果有人动了缓存文件,那么该文件就会失效。
同时,注意到safe_file_get_contents的实现,使用了clearstatcache函数,清除有关文件的系统缓存(不过我也不知道这样有什么好处)。
对于缓存是否失效方面,是比较文件的mtime的。提供了两种方式,一种是比较mtime与当前时间的差是否大于给定的时间,另一种是检查mtime是否晚于给定时间。即,一个是给定时间差,一个是给定失效具体时间。
- FLEAPHP框架的文件缓存系统
- FLEAPHP框架的数据库操作
- FLEAPHP框架的目录结构
- 介绍国产的PHP MVC框架:FleaPHP
- 介绍国产的PHP MVC框架:FleaPHP
- 介绍国产的PHP MVC框架:FleaPHP
- fleaPHP框架的一些基础问题
- 介绍国产的PHP MVC框架:FleaPHP
- FleaPHP的单入口文件详解
- FleaPHP框架中的RBAC
- 关于fleaphp 框架初始化
- fleaphp框架源代码分析
- yii框架文件缓存
- Fleaphp 数组辅助文件中 array_to_tree 的bug修正
- 文件缓存系统
- 清理系统文件缓存
- 【ci框架】ci框架中中有关file文件缓存相关的文件
- 【ci框架】ci框架中中有关memcache文件缓存相关的文件
- 引用 WCF 本质(2)
- 用C#.NET 编写ActiveX(COM)控件
- 方法重写
- 引用 WCF 本质(1)
- CSS对IE6、IE7、IE8支持详细的易用的参考
- FLEAPHP框架的文件缓存系统
- CHAP
- 方法重载
- 监控index是否被使用
- 读取指定文件夹下的所有图片之相对路径
- 曾哥传 第六话 泰拳的挑衅
- CORBA/TAO学习笔记
- linux下安装oracle10xe版
- Boost编译方法