コードをコピーします。 コードは次のとおりです:
/**
*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
truehttp://www.bkjia.com/PHPjc/321534.html技術記事言うまでもなく、誰もがキャッシュの役割を知っています。最近何人かにインタビューしましたが、多くの人がフレームワークを使いすぎて、基本を忘れていることがわかりました。質問すると、必ずフレームワークが問題を解決すると言います。でも彼らは全く知りません...