常見(jiàn)php數(shù)據(jù)文件緩存類匯總
本文實(shí)例匯總了常見(jiàn)php數(shù)據(jù)文件緩存類。分享給大家供大家參考。具體分析如下:
數(shù)據(jù)文件緩存的做法我們常用的有php文件緩存與利用memcache來(lái)緩存數(shù)據(jù),下面面我分別總結(jié)了memcache緩存數(shù)據(jù)與數(shù)據(jù)文件緩存。感興趣的朋友可以參考一下。
1.對(duì)于一般的變量,把該變量變成php語(yǔ)言的格式,寫到文件中,用時(shí)只要include這個(gè)文件就相當(dāng)于加載了cache了.
2.對(duì)于array型的變量,把a(bǔ)rray轉(zhuǎn)化為php語(yǔ)言定義array的字符串,寫到文件中,用時(shí)也只要include就相當(dāng)于加載了cache了.
3.緩存cache時(shí)間上的控制,通過(guò)獲取緩存文件的創(chuàng)建時(shí)間和現(xiàn)在的時(shí)間進(jìn)行對(duì)比,如果沒(méi)有到更新時(shí)間,直接讀取緩存,如果到了更新時(shí)間,查詢數(shù)據(jù)庫(kù).
文件緩存類,代碼如下:
class DataCache
{
/**
* 數(shù)組轉(zhuǎn)換
*
* @param array $array
* @param string $arrayName
* @param array $level
*
* @return string
*/
private function arrayEval($array, $arrayName = '', $level = 0)
{
$space = str_repeat("t", $level);
if (emptyempty($arrayName))
{
$evaluate = "arrayn$space(n";
}
else
{
$evaluate = "${$arrayName} = arrayn$space(n";
}
$space2 = str_repeat("t", $level + 1);
$comma = $space2;
if (!emptyempty($array))
{
foreach ($array as $key => $val)
{
$key = is_string($key) ? ''' . addcslashes($key, ''\') . ''' : $key;
$val = !is_array($val) && (!preg_match('/^-?[1-9]d*$/', $val) || strlen($val) > 12) ? ''' . addcslashes($val, ''\') . ''' : $val;
if (is_array($val))
{
$evaluate .= "$comma$key => " . arrayEval($val, '', $level + 1);
}
else
{
$evaluate .= "$comma$key => $val";
}
$comma = ",n$space2";
}
}
$evaluate .= "n$space)";
// 最后才需要一個(gè)“;”
if ($level == 0)
{
$evaluate .= ";";
}
return $evaluate;
}
/**
* 寫入緩存
*
* @param string $path
* @param string $arrayName
* @param array $data
*
* @return boolean
*/
public static function writeCache($path, $arrayName, $data)
{
if ($handle = fopen($path, 'w+'))
{
$data = self::arrayEval($data, $arrayName);
$dataConvert = "<?phpn" . $data;
flock($handle, LOCK_EX);
$rs = fputs($handle, $dataConvert);
flock($handle, LOCK_UN);
fclose($handle);
if ($rs !== false)
{
return true;
}
}
return false;
}
}
?>
調(diào)用方法,代碼如下:
* 生成文件緩存
*
* @param string $filePath 緩存文件的保存路徑
* @param string $arrayName 存放在緩存文件中的數(shù)組名稱
* @param array $data 數(shù)據(jù)
*
* @return boolean
*/
DataCache::writeCache($filePath, $arrayName, $data);
memcache來(lái)緩存數(shù)據(jù),這里提供這個(gè)文件緩存的類,代碼如下:
/**
* 文件緩存類
* 提供文件緩存
*/
class Cache_FileCache{
/**
* 設(shè)置緩存
* @param $key 緩存的關(guān)鍵字key
* @param $data 緩存的內(nèi)容
* @param $cacheLife 緩存時(shí)間(單位為秒)如果為0 則表示無(wú)限時(shí)間
* @return Bool
*/
public static function setCache($key,$data,$cacheLife)
{
if(file_exists(__SITE_FILE_CACHE))
{
@$file = __SITE_FILE_CACHE . "/" . $key .".php";
$cache = array();
$time = __SYS_TIME;
$cache['content'] = $data;
$cache['expire'] = $cacheLife === 0 ? 0 : $time+$cacheLife;
$cache['mtime'] = $time;
$cache = serialize($cache);
$setReslut = @file_put_contents($file,$cache) or self::error(__line__,"文件寫入出錯(cuò)");
$chmodReslut = @chmod($file,0777) or self::error(__line__,"設(shè)定文件權(quán)限失敗");
if($setReslut && $chmodReslut)
{
return true;
}
else
{
return false;
}
}
}
/**
* 得到緩存數(shù)據(jù)
* @param $key 緩存的關(guān)鍵字key
* @return array
*/
public static function getCache($key)
{
@$file = __SITE_FILE_CACHE . "/" . $key .".php";
if(file_exists($file))
{
$data = @file_get_contents($file);
$data = unserialize($data);
if($data['expire']==0 || $data['expire'] > __SYS_TIME)
{
return $data['content'];
}
else
{
unlink($file);
return array();
}
}
}
/**
* 刪除緩存文件
* @param $key 緩存$key
* @return Bool
*/
public static function delCache($key)
{
if (@unlink(__SITE_FILE_CACHE."/".$key.".php"))
{
return true;
}
else
{
return false;
}
}
/**
* 清除所有緩存文件
* @return Bool
*/
public static function clearAllCache()
{
$files = scandir(__SITE_FILE_CACHE);
foreach ($files as $val)
{
@unlink(__SITE_FILE_CACHE."/".$val);
}
}
/**
* 出錯(cuò)處理函數(shù)
* @param $line 行數(shù)
* @param $msg 信息
*/
public static function error($line,$msg)
{
die("出錯(cuò)文件:".__file__."/n出錯(cuò)行:$line/n錯(cuò)誤信息:$msg");
}
}
?>
希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP has encountered an Access Violation 錯(cuò)誤的解決方法
一般是因?yàn)閑accelerator的問(wèn)題,windows下容易出現(xiàn)這個(gè)問(wèn)題。2010-01-01深入講解PHP Session及如何保持其不過(guò)期的方法
這篇文章主要介紹了深入講解PHP Session及如何保持其不過(guò)期的方法,包括對(duì)Session回收機(jī)制的講解以及SessionId保持不變的問(wèn)題的解決,需要的朋友可以參考下2015-08-08PHP FileSystem 文件系統(tǒng)常用api整理總結(jié)
這篇文章主要介紹了PHP FileSystem 文件系統(tǒng)常用api,結(jié)合實(shí)例形式整理總結(jié)了php文件系統(tǒng)常用函數(shù)的功能、使用技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-07-07PHP實(shí)現(xiàn)數(shù)組和對(duì)象的相互轉(zhuǎn)換操作示例
這篇文章主要介紹了PHP實(shí)現(xiàn)數(shù)組和對(duì)象的相互轉(zhuǎn)換操作,結(jié)合實(shí)例形式分析了php使用get_object_vars以數(shù)組形式訪問(wèn)對(duì)象的方法,以及對(duì)象與數(shù)組相互轉(zhuǎn)換操作技巧,需要的朋友可以參考下2019-03-03PHP替換Word中變量并導(dǎo)出PDF圖片的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于PHP替換Word中變量并導(dǎo)出PDF圖片的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11PHP錯(cuò)誤Parse error: syntax error, unexpected end of file in te
這篇文章主要介紹了PHP錯(cuò)誤Parse error: syntax error, unexpected end of file in test.php on line 12解決方法,需要的朋友可以參考下2014-06-06