как кэшировать веб-страницу в php, чтобы, если страница не была обновлена, зрители должны получить кешированную копию?
Спасибо за вашу помощь. PS: Я новичок в php.
как кэшировать веб-страницу в php, чтобы, если страница не была обновлена, зрители должны получить кешированную копию?
Спасибо за вашу помощь. PS: Я новичок в php.
Фактически вы можете сохранить вывод страницы до окончания script, а затем загрузить кеш в начале script.
пример кода:
<?php
$cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // e.g. cache/index.php.cache
$cachetime = 3600; // time to cache in seconds
if(file_exists($cachefile) && time()-$cachetime <= filemtime($cachefile)){
$c = @file_get_contents($cf);
echo $c;
exit;
}else{
unlink($cachefile);
}
ob_start();
// all the coding goes here
$c = ob_get_contents();
file_put_contents($cachefile);
?>
Если у вас много страниц, требующих этого кеширования, вы можете сделать это:
в cachestart.php
:
<?php
$cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // e.g. cache/index.php.cache
$cachetime = 3600; // time to cache in seconds
if(file_exists($cachefile) && time()-$cachetime <= filemtime($cachefile)){
$c = @file_get_contents($cf);
echo $c;
exit;
}else{
unlink($cachefile);
}
ob_start();
?>
в cacheend.php
:
<?php
$c = ob_get_contents();
file_put_contents($cachefile);
?>
Затем просто добавьте
include('cachestart.php');
в начале ваших скриптов. и добавьте
include('cacheend.php');
в конце ваших скриптов. Не забывайте иметь папку с именем cache и разрешать PHP обращаться к ней.
Также помните, что если вы делаете кеш полной страницы, ваша страница не должна иметь специальный экран SESSION (например, панель отображения участников или что), потому что они также будут кэшироваться. Посмотрите на структуру для конкретного кэширования (переменную или часть страницы).
В дополнение к ответу mauris я хотел бы указать на это:
Вы должны быть осторожны при использовании кеширования. Когда у вас есть динамические данные (что должно быть в случае использования php вместо статического html), вы должны сделать недействительным кеш при изменении соответствующих данных.
Это может быть довольно простым или чрезвычайно сложным, в зависимости от ваших динамических данных.
Update
Как вы недействительны кеш, зависит от конкретного типа кеширования. Вы должны знать, какие кэш файлы принадлежат к какой странице (и, возможно, с пользовательским вводом). При изменении данных вы должны удалить кешированный файл или удалить страницу из структуры данных кэша.
Я не могу дать вам более подробную информацию об этом, не зная, какую реализацию вы используете для кеширования.
Другим людям предлагается, например, пакет Pear или memcached. Они имеют необходимые функции для аннулирования всего кеша или его частей при изменении данных.
$c = ob_get_contents();
file_put_contents($cachefile);
правильный
$c = ob_get_contents();
file_put_contents($cachefile,$c);
иначе script не будет работать.
Используйте memcached. Там объясняется, как это сделать на этом сайте.
Используйте Squid или правильно настройте заголовки HTTP для кэширования браузеров. Я не вижу необходимости откручивать собственную версию кеширования на основе вопроса.
PEAR имеет пакет кэширования (фактически два):
http://pear.php.net/package/Cache и
http://pear.php.net/package/Cache_Lite для небольших приложений
Я однажды использовал пакет Cache (первый) для кэширования запросов, и в то время он выполнял свою работу, насколько я помню.