Как кэшировать веб-страницу в PHP?

как кэшировать веб-страницу в php, чтобы, если страница не была обновлена, зрители должны получить кешированную копию?

Спасибо за вашу помощь. PS: Я новичок в php.

Вы можете фактически сохранить вывод страницы до того, как закончите скрипт, а затем загрузите кеш в начале скрипта.

пример кода:

<?php $cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // eg 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'; // eg 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), вы должны сделать недействительным кеш при изменении соответствующих данных.

Это может быть довольно простым или чрезвычайно сложным, в зависимости от ваших динамических данных.

Обновить

Как вы недействительны кеш, зависит от конкретного типа кэширования. Вы должны знать, какие кэш-файлы принадлежат к какой странице (и, возможно, с пользовательским вводом). При изменении данных вы должны удалить кешированный файл или удалить страницу из своей структуры данных кэша.

Я не могу дать вам более подробную информацию об этом, не зная, какую реализацию вы используете для кеширования.

Другие люди предложили, например, пакет Pear или memcached. Они имеют необходимые функции для аннулирования всего кеша или его частей при изменении данных.

 $c = ob_get_contents(); file_put_contents($cachefile); 

правильно

 $c = ob_get_contents(); file_put_contents($cachefile,$c); 

иначе скрипт не будет работать.

Используйте memcached . Есть объяснение, как это сделать на этом сайте.

Используйте Squid или правильно обновите заголовки HTTP, чтобы сделать кеширование браузера. Я не вижу необходимости откручивать собственную версию кеширования на основе вопроса.

PEAR имеет пакет кэширования (фактически два):

http://pear.php.net/package/Cache и
http://pear.php.net/package/Cache_Lite для небольших приложений

Я однажды использовал пакет Cache (первый) для кэширования запросов и в то время выполнял свою работу, насколько я помню.