PHP自定義快取
阿新 • • 發佈:2019-02-04
<?php
class File {
private $_dir;//定義快取檔案目錄
const EXT = '.txt';//定義字尾名
public function __construct() {
$this->_dir = dirname(__FILE__) . '/files/';//設定快取檔案目錄
}
/*
$key 快取檔名,包含目錄
$value 快取檔案內容,當輸入為null時刪除快取,可為字串或陣列
$cacheTime 設定快取時間,單位為秒
*/
public function cacheData($key, $value = '', $cacheTime = 0) {
$filename = $this->_dir . $key . self::EXT;
if($value !== '') { // 如果沒有改快取時,將value值寫入快取
if(is_null($value)) {
return @unlink($filename);
}
$dir = dirname($filename );
if(!is_dir($dir)) {
mkdir($dir, 0777);
}
$cacheTime = sprintf('%011d', $cacheTime);//設定該快取時的時間,並拼接到資料中
return file_put_contents($filename,$cacheTime . json_encode($value));
}
if(!is_file($filename)) {
return FALSE;
}
$contents = file_get_contents($filename);//有該快取時讀取快取
$cacheTime = (int)substr($contents, 0 ,11);
$value = substr($contents, 11);
if($cacheTime !=0 && ($cacheTime + filemtime($filename) < time())) {//filemtime()該檔案上次修改內容
unlink($filename);//超過該快取時間後刪除該快取
return FALSE;
}
return json_decode($value, true);
}
}
$file = new File();
echo $file->cacheData('test1');