ホームページ  >  記事  >  バックエンド開発  >  PHP抽象キャッシュ

PHP抽象キャッシュ

WBOY
WBOYオリジナル
2016-06-13 13:02:29936ブラウズ

php 抽象キャッシュ クラス
require_once dirname(__FILE__)."/../Model/Iface/Icache.php";
抽象クラス AllCache は Icache を実装します
{
static $cache_dir;
const CACHETIME=60;//キャッシュ時間は 60 秒です
static $_data;
static $_interce;
//コンストラクター関数
public function __construct()
{
$cache_dirname = dirname(__FILE__)."/../Cache";
if(!@is_dir($cache_dirname))
{
if(!@mkdir($cache_dirname,0777))
{
self::msgbox('キャッシュ ファイルが存在しないため作成できません。手動で作成する必要があります。');
return false;
}
}
self:: $cache_dir = $cache_dirname;
}
/**
* 静的呼び出し
* self はクラス自体を参照します
*/
public static function getInstance()
{
if(! (self::$_interce instanceof self)) {
self: :$_interce = new self();
}
return self::$_interce;
}
//例外を出力
プライベート関数 msgbox($errorstring)
{
echo "エラーが発生しました:

".$errorstring."
";
}
//キャッシュファイルを設定
プライベート関数cache_page($pageurl,$pagedata)
{
if(!$fso=fopen($pageurl,'w' )){
self::msgboxs('キャッシュ ファイルを開けません。');//trigger_error
return false;
}
if(!flock($fso,LOCK_EX)){/ /LOCK_NB, 排他的ロック
self::msgboxs('キャッシュ ファイルをロックできません。');//trigger_error
return false;
}
if(!fwrite($fso,$pagedata) )//バイト ストリームの書き込み、他の形式への書き込みをシリアル化します
self::msgboxs('キャッシュ ファイルを書き込めません。');//trigger_error
return false;
}
flock($ fso,LOCK_UN) ;//ロックを解除
fclose($fso);
return true;
}
//ファイルステータスを読み取る
プライベート関数 isOpenCache($cacheFile)
{
if(!file_exists($cacheFile)){
self::msgbox('キャッシュ ファイルを読み取ることができません。');exit;
}
/*echo 'キャッシュ ファイルを読み取ります:'。 $cacheFile ;
return unserialize(file_get_contents($cacheFile));
$fso = fopen($cacheFile, 'r');
$data = fread($fso, filesize($cacheFile));
fclose($fso);
return $data;*/
}

/**
* データのフォーマット
*/
プライベート関数 setFileContent($data)
{
$html = " $html .="$data= ".var_export($data, true).";n";
$html .="?> ";
return $html;
}

/**
* キャッシュデータの設定
* @param $cacheFile キャッシュファイル名
× @param $_data キャッシュデータソース
*/
public function readData($cacheFile='default_cache.txt',$_data)
{
$_data = self::SetFileContent($_data);
$cacheFile = self::$cache_dir."/".$cacheFile;
if(file_exists($cacheFile))
{
self::isOpenCache($cacheFile);
if(filemtime($cacheFile)<(time()-self::CACHETIME))
{
self::cache_page($cacheFile,$ _data) ;
}
}else{
self::cache_page($cacheFile,$_data);
}
require_once($cacheFile);
self::$_data = $data ;
}

/**
* データを取得します
*/
public function GetData()
{
return self::$_data;
}
}
/*
AllCache::readData("cache_news.php",array(0,1,2,3,5,6));
print_r(AllCache::GetData());
*/
?>

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。