ホームページ  >  記事  >  バックエンド開発  >  phpguru_PHP チュートリアルの Php Cache クラスのソース コード

phpguru_PHP チュートリアルの Php Cache クラスのソース コード

WBOY
WBOYオリジナル
2016-07-21 15:39:35861ブラウズ

言うまでもなく、誰もがキャッシュの役割を知っています。最近何人かにインタビューしましたが、質問すると、多くの人がフレームワークを使いすぎて基本を忘れていることがわかりました。しかし、彼らは常にフレームワークが問題を解決すると言います。そういうことなので、日常生活で基礎知識の蓄積に注意を払うと、いくつかの問題に簡単に対処できるようになります

ということもあります。グループの友人の中には、基礎知識を非常に軽視する人がいます。彼らは、能力があれば十分であり、基礎知識のテストからは何も学べないといつも言います。私はこの考え方に常に同意しません。一般的な考え方に移り、PHP キャッシュ クラスを紹介します:

コードを投稿します: 以下にダウンロード アドレスもあります。重要なことは学ぶことです

コードをコピーします。 コードは次のとおりです:

/**
*o----------------------------------------------- -------------------------------o
* |このパッケージは、Phpguru ライセンスに基づいてライセンスされています。簡単な概要は次のとおりです。
* |商用利用の場合は、少額の 1 回限りのライセンス料を支払う必要があります。 |の場合
* |登録された慈善団体および教育機関には減額ライセンスがあります |
* |有料でご利用いただけます。詳細については、次のサイトを参照してください。
* | |
* | http://www.phpguru.org/static/license.html |
*o----------------------------------------------- -------------------------------o
*/
/**
* PHP5 用のキャッシュ ライブラリ
*
* データと出力のキャッシュを処理します。デフォルトは /dev/shm
* (共有メモリ) です。すべてのメソッドは静的です。
*
* 例: (出力キャッシュ)
*
* if (!OutputCache::Start('group', 'unique id', 600)) {
*
* // ... 出力
*
* OutputCache ::終わり();
* }
*
* 例: (データ キャッシュ)
*
* if (!$data = DataCache::Get('group', 'unique id')) {
*
* $data = time();
*
* DataCache::Put('グループ', '一意の ID', 10, $data);
* }
*
* echo $data;
*/
クラスキャッシュ
{
/**
* キャッシュが有効かどうか
* @var bool
*/
public static $enabled = true;
/**
* キャッシュ ファイルを保存する場所
* @var string
*/
protected static $store = '/dev/shm/';
/**
* キャッシュ ファイルで使用するプレフィックス
* @var string
*/
protected static $prefix = 'cache_';
/**
* データを保存します
*
* @param string $group データを保存するグループ
* @param string $id このデータの一意の ID
* @param int $ttl キャッシュする時間 (秒単位)
*/
保護された静的関数 write($group, $id, $ttl, $data)
{
$filename = self::getFilename($group, $id);
if ($fp = @fopen($filename, 'xb')) {
if (flock($fp, LOCK_EX)) {
fwrite($fp, $data);
}
fclose($fp);
// filemtime を設定します
touch($filename, time() + $ttl);
}
}
/**
* データを読み取ります
*
* @param string $group データを保存するグループ
* @param string $id このデータの一意の ID
*/
保護された静的関数 read($group, $id)
{
$filename = self::getFilename($group, $id);
return file_get_contents($filename);
}
/**
* エントリがキャッシュされているかどうかを決定します
*
* @param string $group データを保存するグループ
* @param string $id このデータの一意の ID
*/
保護された静的関数 isCached($group, $id)
{
$filename = self::getFilename($group, $id);
if (self::$enabled && file_exists($filename) && filemtime($filename) > time()) {
return true;
}
@unlink($filename);
false を返します。
}
/**
* グループ、ID、
* ストアからファイル名/パスを構築します。
*
* @param string $group データを保存するグループ
* @param string $id このデータの一意の ID
*/
保護された静的関数 getFilename($group, $id)
{
$id = md5($id);
self::$store を返します。 self::$prefix 。 "{$group}_{$id}";
}
/**
* 使用するファイル名のプレフィックスを設定します
*
* @param string $prefix 使用するファイル名のプレフィックス
*/
パブリック静的関数 setPrefix($prefix)
{
self::$prefix = $prefix;
}
/**
* キャッシュ ファイルのストアを設定します。デフォルトは
* /dev/shm です。末尾にスラッシュが必要です。
*
* @param string $store キャッシュ データを保存するディレクトリ
*/
パブリック静的関数 setStore($store)
{
self::$store = $store;
}
}
/**
* 基本キャッシュ クラスの出力キャッシュ拡張機能
*/
class OutputCache extends Cache
{
/**
* 現在記録されているデータのグループ
* @var string
*/
private static $group;
/**
* 現在記録中のデータのID
* @var string
*/
プライベート静的 $id;
/**
* 現在記録中のデータの TTL
* @var int
*/
プライベート静的 $ttl;
/**
* キャッシュのオフを開始します。キャッシュされている場合は true を返し、出力を
* ダンプします。キャッシュされず、出力バッファリングを開始する場合は False。
*
* @param string $group データを保存するグループ
* @param string $id このデータの一意の ID
* @param int $ttl キャッシュする期間 (秒単位)
* @return bool キャッシュされている場合は True 、そうでない場合は false
*/
パブリック静的関数 Start($group, $id, $ttl)
{
if (self::isCached($group, $id)) {
echo self::read($グループ、$id);
true を返します。
} else {
ob_start();
self::$group = $group;
self::$id = $id;
self::$ttl = $ttl;
false を返します。
}
}
/**
* キャッシュを終了します。データをディスクに書き込みます。
*/
パブリック静的関数 End()
{
$data = ob_get_contents();
ob_end_flush();
self::write(self::$group, self::$id, self::$ttl, $data);
}
}
/**
* 基本キャッシュ クラスのデータ キャッシュ拡張機能
*/
class DataCache は Cache を拡張します
{
/**
* キャッシュからデータを取得します
*
* @param string $group このデータが属するグループ
* @param string $id データの一意の ID
* @returnmixed 結果のデータ、または null のいずれか
*/
public static function Get($group, $id)
{
if (self::isCached($group, $id)) {
return unserialize(self::read($group, $id));
}
return null
/**
* データをキャッシュに保存します
*
* @param string $group このデータが属するグループ
* @param string $id データの一意の ID
* @param int $ttl キャッシュする時間 (秒単位)
* @parammixed $data 保存するデータ
*/
public static function Put($group, $id); , $ttl, $data)
{
self::write($group, $id, $ttl, Serialize($data));
}
}
?>

使用法:

コードは次のとおりです:
$dir = !empty($_SERVER['argv'][1]) $_SERVER['argv'][1] : '.'; $dir );
while ($filename = readdir($dh)) {
if ($filename == '.' OR $filename == '..') {
Continue;
if (filemtime($dir) . DIRECTORY_SEPARATOR . $filename) < time()) {
}


ソースコードパッケージのダウンロード


http://www.bkjia.com/PHPjc/321534.html
www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/321534.html技術記事言うまでもなく、誰もがキャッシュの役割を知っています。最近何人かにインタビューしましたが、多くの人がフレームワークを使いすぎて、基本を忘れていることがわかりました。質問すると、必ずフレームワークが問題を解決すると言います。でも彼らは全く知りません...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。