<?php
// cache - will work online - not locally
// location and prefix for cache files
define('CACHE_PATH', "siteCache/");
// how long to keep the cache files (hours)
define('CACHE_TIME', 12);
// return location and name for cache file
function cache_file()
{
return CACHE_PATH . md5($_SERVER['REQUEST_URI']);
}
// display cached file if present and not expired
function cache_display()
{
$file = cache_file();
// check that cache file exists and is not too old
if(!file_exists($file)) return;
if(filemtime($file) < time() - CACHE_TIME * 3600) return;
// if so, display cache file and stop processing
readfile($file);
exit;
}
// write to cache file
function cache_page($content)
{
if(false !== ($f = @fopen(cache_file(), 'w'))) {
fwrite($f, $content);
fclose($f);
}
return $content;
}
// execution stops here if valid cache file found
cache_display();
// enable output buffering and create cache file
ob_start('cache_page');
?>
これは、db ファイルの動的 Web サイトで使用しているキャッシュ コードです。そして、すべてのページの上部にこのコードが含まれています。
<?php session_start();
include("db.php"); ?>
ページはキャッシュされており、機能していますが、フォームの送信時、ユーザーのログイン時、ページを通過する変数では何も起こりません。古いページが表示されています。このキャッシュ コードを使用して、サイトが機能し続けるようにするにはどうすればよいですか。
ワードプレスのプラグインがどのようにそれを行うのだろうか。Wp Super Cache と W3T Cache はすべてをキャッシュしますが、ブログは引き続き機能します。ウェブサイトの一部で選択的に使用する必要がありますか。
このような:
<?php
// TOP of your script
$cachefile = 'cache/'.basename($_SERVER['SCRIPT_URI']);
$cachetime = 120 * 60; // 2 hours
// Serve from the cache if it is younger than $cachetime
if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile))) {
include($cachefile);
echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." -->";
exit;
}
ob_start(); // start the output buffer
// Your normal PHP script and HTML content here
// BOTTOM of your script
$fp = fopen($cachefile, 'w'); // open the cache file for writing
fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file
fclose($fp); // close the file
ob_end_flush(); // Send the output to the browser
?>
ただし、ページからの選択的なコンテンツではなく、pageURL (ページ全体のキャッシュ) に関するものであるため、同様に機能しません。
お知らせ下さい。これを行う簡単なスクリプトはありますか。Pear::Cache_Lite は良さそうですが、実装が難しそうです。
更新: Cache_Lite を使用しました。それは同じだ。すべてまたは含まれている php ファイルをキャッシュします。操作できる構成オプションはほとんどありません。ただし、全体として使用すると、取得、投稿、セッション データの更新も無視されます...そして、削除されない限り、以前にキャッシュされたページが表示されます。