<?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. И каждая страница содержит этот код вверху.
<?php session_start();
include("db.php"); ?>
Страницы кэшируются и работают, но при отправке формы, при входе пользователя в систему, при прохождении переменной через страницы ничего не происходит. Отображаются старые страницы. Как мне использовать этот код кеширования, чтобы он мог работать, но при этом оставался работоспособным сайт.
Интересно, как это делают плагины wordpress. 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. Есть несколько вариантов конфигурации, с которыми можно поиграть. Но при использовании в целом он также будет игнорировать обновления данных получения, публикации, сеанса ... и будет отображать предыдущие кешированные страницы, если они не будут удалены.