<?php
/**
+------------------------------------------------------------------------------
* Framk PHP框架
+------------------------------------------------------------------------------
* @package Framk
* @author shawn fon <shawn.fon@gmail.com>
+------------------------------------------------------------------------------
*/
class Cache {
private $cacheDir;
private $cacheTime;
public
function __construct( $cacheDir, $cacheTime ) {
$this->cacheDir = $cacheDir; $this->cacheTime = $cacheTime; }
public
function __call( $method, $args ) {
$sql = @$args[ 0 ];
if ( !empty( $this->cacheDir ) ) {
$data = $this->findByCache( $sql, $method ); } else {
$data = $this->findByDB( $sql, $method ); }
return $data;
}
private
function findByDB( $sql, $method ) {
$database = _instance( 'Database', '', 1 );
if ( method_exists( $database, $method ) ) {
return $database->$method( $sql );
} else {
_error( 'methodNotExist', '数据查询方法不存在:' . $method, true );
}
}
private
function findByCache( $sql, $method ) {
$cacheDir = _mkdir( CACHE . str_replace( '/', S, $this->cacheDir ) . S ); $timeFile = $cacheDir . str_replace( '/', '_', $this->cacheDir ) . '.txt'; $cacheFile = $cacheDir . md5( str_replace( ' ', '', $sql ) ) . '.php';
if ( $this->isCacheCheck( $cacheFile, $timeFile ) ) { $data = $this->findByDB( $sql, $method );
$content = "<?php \r\n return " . var_export( $data, true ) . "; \r\n ?>"; if ( !file_put_contents( $cacheFile, $content ) )_error( 'writeError', '写入缓存失败请检查目录权限:' . $cacheFile, true );
}
if ( file_exists( $cacheFile ) ) {
$cacheContent = require( $cacheFile ); return $cacheContent;
} else {
_error( 'readError', '读取缓存失败,请检查缓存文件是否存在:' . $cacheFile, true );
}
}
private
function isCacheCheck( $cacheFile, $timeFile ) {
if ( !file_exists( $timeFile ) )fclose( fopen( $timeFile, "w" ) ); if ( !file_exists( $cacheFile ) || filemtime( $cacheFile ) + $this->cacheTime < filemtime( $timeFile ) ) {
return true; } else {
return false;
}
}
public
function update( $sql ) {
$database = _instance( 'Database', '', 1 );
$result = $database->updt( $sql ); $this->upt_cache_dir($result);
return $result;
}
public function modify( $table, $arrayDataValue, $where = '', $debug = false ) {
$database = _instance( 'Database', '', 1 );
$result = $database->update( $table, $arrayDataValue, $where, $debug = false ) $this->upt_cache_dir($result);
return $result;
}
public function insert( $table, $arrayDataValue, $debug = false ){
$database = _instance( 'Database', '', 1 );
$result = $database->insert( $table, $arrayDataValue, $debug ); $this->upt_cache_dir($result);
return $result; }
public function replace( $table, $arrayDataValue, $debug = false ){
$database = _instance( 'Database', '', 1 );
$result = $database->replace( $table, $arrayDataValue, $debug); $this->upt_cache_dir($result);
return $result; }
public function delete( $table, $where = '', $debug = false ){
$database = _instance( 'Database', '', 1 );
$result = $database->delete( $table, $where, $debug); $this->upt_cache_dir($result);
return $result; }
public function upt_cache_dir($result){
if ( !empty( $this->cacheDir ) && $result > 0 ) {
$arr = explode( ',', $this->cacheDir );
foreach ( $arr as $key => $value ) { $cacheDir = _mkdir( CACHE . str_replace( '/', S, $value ) . S ); $timeFile = $cacheDir . str_replace( '/', '_', $value ) . '.txt'; fclose( fopen( $timeFile, "w" ) );
}
}
}
}
?>