最近、プログラム レベル、非プログラム レベル、メモリ キャッシュ、ファイル キャッシュなどを含むキャッシュに関する多くの記事を注意深く読み、多くの恩恵を受けたと感じています。記憶力を強化して、よりアクティブにキャッシュに関するプログラムを書き始めましょう。
これは私が書いた PHP ファイル キャッシュ クラスです。このクラスは、PHP で http リクエストに応答してコンパイルおよび生成された HTML コードをすべてサーバー上にファイルの形式で保存するだけです。キャッシュの有効期間内であれば、直接キャッシュが読み込まれてアクセスされる場合、キャッシュが無効な場合には、通常のPHPへのアクセスと同様にデータベースにクエリを実行してデータを取得します。同時に、このクラスはキャッシュファイルを生成します。次のアクセスのためにページを保存し、データやその他のクエリの損失を軽減します。
もちろん、このクラスは単なる入門レベルの記述方法であり、実装が簡単です。これは、HTML を静的に生成するのと同様に、ページ全体をキャッシュしますが、このクラスは一定期間キャッシュし、自動的に再生成できます。また、データベース テーブルをファイルに保存したり、データの一部を php ファイルの形式またはシリアル化されたストレージの形式でファイルに保存したりするなど、ファイル キャッシュを一般的に使用する CMS やその他のシステムも多くあります。原理は同様です。そして要件は、何があっても同じキャッシュ効果を達成できることです。
ファイル キャッシュはそのうちの 1 つにすぎません。実際のキャッシュ方法には、php バッファ: eaccelerator、apc、phpa、xcache など、リバース プロキシに基づく Web キャッシュ: Nginx、SQUID、mod_proxy、共通メモリ キャッシュなどがあります。 Memcached など
コード:
クリップボードにコピー引用コンテンツ:
[www.bkjia.com]
class fancyCache
{
private static $_instance = NULL;
protected $_options =array();
/**
* 初期化コンストラクター
* $cacheDir: キャッシュ ファイル ディレクトリ
* $expire: キャッシュ ファイルの有効期間 (秒単位)
* $file_ext: キャッシュ ファイルのサフィックス
*/
public static function init($cacheDir='./cache) ',$expire=1800,$file_ext='.htm')
{
$instance = self::getInstance();
//キャッシュディレクトリが有効かどうかを判断する
if($instance->isValidCacheDir($キャッシュディレクトリ) )
{
$instance->_options['cache_dir']=rtrim($cacheDir,'/') . '/';
$instance->_options['expire']=$expire;インスタンス->_options['file_ext']=$file_ext;
$instance->_options['cache_file_url']=$instance->getCacheFileUrl();
if($_SERVER['REQUEST_METHOD']==' GET' )
{
//キャッシュの有効期限が切れていない場合は、キャッシュ ファイルを読み取ります
if($instance->isExpired()) {
$instance->readCache()
}
else
; {
//自動的にキャッシュ
ob_start(array($instance,"autoCache"));
}
}
else
{
// GET リクエストではない場合、キャッシュを削除
if(file_exists($instance- >_options['cache_file_url'])) unlink($instance->_options['cache_file_url']);
}
}
}
/**
* 現在のオブジェクトを取得します
*/
パブリック静的関数 getInstance()
{
if(self::$_instance==NULL )
{
self::$_instance=new self();
}
return self::$_instance;
/**
* 読み取りキャッシュ
*/
保護された関数 readCache ()
{
$instance =self: :getInstance();
$fp =fopen($instance->_options['cache_file_url'],'rb');
fpassthru($fp); fp);
}
/**
* 自動書き込みキャッシュ
*/
パブリック関数 autoCache($contents)
{
$instance = self::getInstance(); _options['cache_file_url'],'wb' ))
{
if (flock($fp, LOCK_EX))
{
fwrite($fp, $contents); fp);
chmod($instance->_options['cache_file_url'],0777);
}
}
return $contents;
/**
* 期限切れのキャッシュをすべて削除します
* /
保護された関数 DelOldCache()
{
$instance = self::getInstance();
chdir($instance->_options['cache_dir']);
foreach (glob("*/*".$)インスタンス->options['file_ext'] ) as $file)
{
if(time()-filemtime($file)>$instance->options['expire'])unlink($file); }
}
/**
* キャッシュが有効かどうかを確認します
* return true の有効期限が切れています
*/
保護された関数 isExpired()
{
$instance = self::getInstance();
if(!file_exists($instance->_options['cache_file_url']) )) false を返す;
if(time ()-filemtime($instance->_options['cache_file_url'])>$instance->_options['expire']) false を返す
}
/**
* キャッシュ ディレクトリが存在するかどうかを確認し、存在しない場合は作成します
* 存在するか、正常に作成された場合は true を返します
* /
保護された関数 isValidCacheDir($cacheDir)
{
$instance = self::getInstance();
$cacheDir=rtrim($cacheDir,'/') ;
if(!file_exists($cacheDir) ){
try
{
mkdir($cacheDir,0777)
}
catch(Exception $e)
{
echo '失敗しましたキャッシュ ディレクトリを作成します!';
return false;
}
}
//キャッシュ ファイル サブディレクトリを作成します
$cacheFileDir=$cacheDir.substr(md5($instance->getPageUrl()),0,1); (!file_exists($cacheFileDir))
{
try
{
mkdir($cacheFileDir,0777);
}
catch(Exception $e)
{
echo 'キャッシュの作成に失敗しましたdir!';
false を返す }
}
true を返す
/**
* キャッシュファイルのパスを取得します
*/
$instance =self::getInstance(); pageUrl =md5($instance->getPageUrl());
return $instance->options['cache_dir'].substr($pageUrl,0,1).'/'.$pageUrl.$instance-> ;_options['file_ext'];
}
/**
* 現在アクセスしているページの完全な URL を取得します
*/
保護された関数 getPageUrl() {
$url = '';
if (isset($_SERVER['REQUEST_URI'])) {
$url = $_SERVER['REQUEST_URI'];
}
else {
$url = $_SERVER['PHP_SELF']
$url .= empty($_SERVER['QUERY_STRING'])?'':'?' .$_SERVER['QUERY_STRING'];
}
$url を返す
}
}
?>
このブログはEmlogプログラムを使用しているので、Emlogキャッシュ挿入用のクラスを少し修正しました
1.クラスに追加(コメントは削除できません)
クリップボードにコピー引用コンテンツ:
[www.bkjia.com]
/*
プラグイン名: fancyCache-page Cache
バージョン: beta 1.0
プラグイン URL: http://meego123.net/
説明: fancyCache を使用して、利用可能なページを自動的にキャッシュします
作成者: Jamin
作成者のメール: wenjingmin@gmail.com
作者URL: http://meego123.net/
*/
!define('EMLOG_ROOT') && exit('access deined!');
addAction('index_header', fancyCache::init(EMLOG_ROOT."/content) / fancyCache",60*60*24));
2. ファイル名を fancycache.php として保存し、その中に fancycache.php を置き、Emlog プラグインディレクトリ /content/plugins の下にまとめます。
3. Emlogの背景の「機能拡張」-「プラグイン」に移動し、プラグインを有効にします
この記事の出典: http://meego123.net/?post=127
http://www.bkjia.com/PHPjc/363847.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/363847.html技術記事最近、プログラム レベル、非プログラム レベル、メモリ キャッシュ、ファイル キャッシュなど、キャッシュに関する多くの記事を注意深く読みました。知識を定着させ、記憶力を強化するために、非常に有益になったと感じています。 ..