FLEAPHP框架的文件緩存系統

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是否晚於給定時間。即,一個是給定時間差,一個是給定失效具體時間。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章