キャッシュが生成されていた場合、CakePHP及びbaserCMSを介さずにキャッシュデータを呼び出す処理を作った。
ベンチとったら700倍の速度が出たので備忘録。
ファイルパスが環境依存だったりするので、どこでも動くよう調整してプラグイン化したら、また晒す。
ちなみに、下記をwebrootのindex.phpの最初に記述してあげれば動く
/**
// URI判別
// 頭に「/」がついて入ってくる
$requestUrl = $_SERVER['REQUEST_URI'];
if(preg_match("/\/$/", $requestUrl)) {
// 最後がスラッシュで終わっている場合は index を付与する
$requestUrl .= "index";
}// CakePHPのキャッシュファイル名の変換
$path = str_replace('/', '_', $requestUrl);
$path = preg_replace("/^_/", "", $path);
$path = strtolower($path);$cachefileName = dirname(__FILE__) . '/../tmp/cache/views/'. $path .'.php';
// ログイン判別 - 管理者としてログイン中はキャッシュを利用しない
session_start();
if (file_exists($cachefileName) && empty($_SESSION['Auth'])) {
$output = file_get_contents($cachefileName);// nocache判別 - nocacheを利用していたらcacheをそのまま利用しない(出来ない)
if (strpos($output, 'nocache' === false)) {
$output = preg_replace("/\<\?php.*\?\>/s", "", $output);// キャッシュの有効時間判別
if (preg_match('/^{C}/', $output, $match) && isset($match[1])) {
if (time() <= $match[1]) {
echo $output;
exit();
}
}
}
}