Heim >Backend-Entwicklung >PHP-Tutorial > php 抽象缓存种

php 抽象缓存种

WBOY
WBOYOriginal
2016-06-13 13:02:29975Durchsuche

php 抽象缓存类
require_once dirname(__FILE__)."/../Model/Iface/Icache.php";
abstract class AllCache implements 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;
}
//输出异常
private function msgbox($errorstring)
{
echo "发生错误:

".$errorstring."
";
}
    //设定缓存文件
private function 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)){//写入字节流,serialize写入其他格式
self::msgboxs('无法写入缓存文件.');//trigger_error
return false;
}
flock($fso,LOCK_UN);//释放锁定
fclose($fso);
return true;
}
    //读取文件状态
private function 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;*/
}

/**
* 格式化数据
*/
private function 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) {
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());
*/
?>

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel: php引述(&)详解 Nächster Artikel: php实现大文件下传带进度条