PHP ファイルキャッシュクラス

クラス:
$oFC = new FileCache();
$sKey = 'ab_123’;
$data = $oFC -> get($sKey);
if (is_null($data))
$oFC -> set($sKey, array('name’ => 'ttt’, 'datetime’ => date('Y-m-d H:i:s’)), 100000);
print_r($data);

サンプルコード:
* self::$msCachePath キャッシュディレクトリは共有ディレクトリである *
*
* @param string $sCachePath
*/
function __construct($sCachePath = './tmp/’)
{
if (is_null(self :: $msCachePath))
self :: $msCachePath = $sCachePath;
}
/**
* * * キャッシュを読む
* 戻り値: キャッシュ,文字列や配列の内容;キャッシュが空または期限切れでnullを戻す *
*
* @param string $sKey キャッシュキー*
* @return string | null *
* @access public
*/
public function get($sKey)
{
if (empty($sKey))
return false;
$sFile = self :: getFileName($sKey);
if (!file_exists($sFile))
return null;
else
{
$handle = fopen($sFile, 'rb’);

if (intval(fgets($handle)) > time())
{
// タイムスタンプを確認 { //有効期限にデータを取得
$sData = fread($handle, filesize($sFile));
fclose($handle);
return unserialize($sData);
}
else
{
// 失効期限
fclose($handle);
return null;
}
}
}
/**
* キャッシュを書き込む * *
* @param string $sKey キャッシューキー *
* @param mixed $mVal オブジェクトを保存 *
* @param int $iExpire 失効時間 *
* @return bool
* @access public
*/
public function set($sKey, $mVal, $iExpire = null)
{
if (empty($sKey))
return false;
$sFile = self :: getFileName($sKey);
if (!file_exists(dirname($sFile)))
if (!self :: is_mkdir(dirname($sFile)))
return false;
$aBuf = array();
$aBuf[] = time() + ((empty($iExpire)) ? self :: miEXPIRE : intval($iExpire));
$aBuf[] = serialize($mVal);
/**
* ファイルを書く操作
*/
$handle = fopen($sFile, 'wb’);
fwrite($handle, implode(“\n", $aBuf));
fclose($handle);
return true;
}
/**
* * * 指定されたキャッシュキーを削除 *
*
* @param string $sKey キャッシューキー
* @return bool
*/

public function del($sKey)
{
if (empty($sKey))
return false;
else
{
@unlink (self :: getFileName($sKey));
return true;
}
}
/**
* * * キャッシュファイル完全パスを取得
* 戻す: 完全パス
*
*
* @param string $sKey キャッシューキー *
* @return string
* @access protected
*/

private static function getFileName($sKey)
{
if (empty($sKey)) return false;
$key_md5 = md5($sKey);
/**
* $aFileName = array();
* $aFileName[] = rtrim(self :: $msCachePath, '/’);
* $aFileName[] = $key_md5{0} . $key_md5{1};
* $aFileName[] = $key_md5{2} . $key_md5{3};
* $aFileName[] = $key_md5{4} . $key_md5{5};
* $aFileName[] = $key_md5;
*/
return self :: $msCachePath . '/’ . $key_md5;
// return implode('/’, $aFileName);
}
/**
* * * ディレクトリを作為
* *
*
* @param string $sDir
* @return bool
*/
private static function is_mkdir($sDir = ")
{
if (empty($sDir))
return false;
/**
* ディレクトリを作成できない場合、システムが直製にエラーメッセージが表示
*/
echo $sDir;
if (!mkdir($sDir, 0666))
return false;
else
return true;
}
}

Source

Posted by arkgame