ホームページ >バックエンド開発 >PHPチュートリアル >PHP変数をファイル形式でキャッシュする方法
この記事の例では、PHP 変数をファイルの形式でキャッシュする方法について説明します。皆さんの参考に共有してください。具体的な実装方法は以下の通りです。
[php] view plaincopy
/*
$cache_set = array(
//キャッシュパス、最後に「/」を追加
'cache Root '=>'./cache/',
//キャッシュ時間
'cacheTime'=>20,
//キャッシュタイプ
'cacheType'=>1,
//拡張子
'cacheExe'=>'.php'
);
$cache = new Cache($cache_set);
$ a="aaa ";
if($cache->cache_is("d")){
$c=$cache->cache_read("d"); echo "c" ;
print_r($c);
}else {
$b=$cache->cache_data('d',$a);print_r($b);
//$cache->clear("a");
//echo $cache->cache_read("./cache/d.php");
//echo $d;
/* *
* データ キャッシュ クラス v1.0
* @author shake
* 2009-11-13 16:02:26
* ページではなく変数などのデータをキャッシュするために使用されます
*/
class Cache{
//構成
public $config = array(
//キャッシュパス
'cacheRoot'=>'./cache/',
//キャッシュ時間
'cacheTime'=>1,
// キャッシュタイプ 1 シリアル化データ 2 変数
'cacheType'=>2,
// 拡張機能名
'cacheExe'=> '.php '
//中間変数を変換
);
function __construct($cache_set = array())
if(!empty($cache_ set) )) $this ->config=array_merge($this->config,$cache_set);
$this->config['ClassName'] = __CLASS__ }
public function clear($filename=) ''){
if (file_exists($this->cache_file($filename))) {
@unlink($this->cache_file($filename))
}elseif (empty($filename); ){
$this->clear_dir($this->config['cacheRoot']);
}else{
$this->clear_dir($this->config['cacheRoot'])。 $filename);
echo $this->config['cacheRoot'].$filename;
}
}
// パスを削除するためのループ
private function clear_dir($dir,$to = false)
{
if ($list = glob($dir.'/*'))
{
foreach ($list as $file)
{
is_dir($this->) clear_dir($file) : unlink($file);
}
}
if ($to === false) rmdir($dir) }
// 書き込みキャッシュ
プライベート関数cache_write ( $filename, $ writetext, $openmod='w'){
if (!file_exists($filename)) {
@$this->makeDir( dirname($filename));
if( @$fp = fopen($filename, $openmod)) {
flock($fp, $writetext);
fclose($fp); } else {
echo "ファイル: $filename 書き込みエラー。";
return false }
}
//キャッシュの有効期間有効 return true
public function queue_is($fileName){
$fileName=$this->cache_file($fileName);
if( file_exists( $fileName ) ) {
// if キャッシュ時間が負の数の場合、有効期限は切れません。 if ($this->config['cacheTime'] == 0) {
return false }
// の作成時間を取得します。キャッシュ ファイル
$ctime = intval(filemtime($fileName));
// キャッシュ時間より大きいかどうかを比較し、大きい場合は期限切れになり、そうでない場合は期限切れになりません
if (time( ) - $ctime > $this->config['cacheTime']) {
return false;
}else {
return true
}
// ファイルは存在しないため、期限切れとみなされます。
}else {
return false;
}
}
public function queue_data($name,$data){
$varname=$name
$name = $this->cache_file($) name);
//config['cacheTime']==0、つまり、データはキャッシュせずに直接返されます
if ($ this->config['cacheTime'] <> 0) {
if($this->config['cacheType']==1){
$write_data = "".serialize($data);
($data,true) ;$write_data .=";\r\n?>
}
$this->cache_write($name,$write_data)
}
$ データを返します。
//キャッシュファイル名
プライベート関数cache_file($filename){
return $this->config['cacheRoot'].$filename.$this->config['cacheExe' ;
return '' ;
}
if($this->config['cacheType']==1){
if (function_exists('file_get_contents')){
$cache_Content=file _get_contents($file ; ,filesize( $file)) ;
if (strlen($data)===0)
$cache_Content .= $data;
fclose($fopen);
$cache_Content = substr($cache_Content,13);/* Remove */$cache_Content = unserialize($cache_Content);
return $cache_Content }else{
include_once; ($ファイル);
$var を返す;
}
}
//循環环创建目录
private function makeDir( $dir, $mode = 0777 ) {
if( ! $dir ) return 0;
$dir = str_replace( "\\", "/", $dir );
$mdir = 「」;
foreach( explode( "/", $dir ) as $val ) {
$mdir .= $val."/";
if( $val == ".." || $val == "." || trim( $val ) == "" ) 続行;
if( ! file_exists( $mdir ) ) {
if(!@mkdir( $mdir, $mode )){
return false;
}
}
}
trueを返します。
}
}
?>