Я предпочитаю использовать обратный прокси-сервер для кэширования, например Varnish .
Что касается чисто PHP-решения, у вас может быть некоторый код в конце вашего скрипта, который кэширует окончательный результат, и код в начале, который проверяет, кэширована ли страница. Если страница была найдена в кэше, отправьте ее и закройте, а не выполняйте запросы снова.
<?php
function cache_file() {
// something to (hopefully) uniquely identify the resource
$cache_key = md5($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING']);
$cache_dir = '/tmp/phpcache';
return $cache_dir . '/' . $cache_key;
}
// if we have a cache file, deliver it
if( is_file( $cache_file = cache_file() ) ) {
readfile( $cache_file );
exit;
}
// cache via output buffering, with callback
ob_start( 'cache_output' );
//
// expensive processing happens here, along with page output.
//
function cache_output( $content ) {
file_put_contents( cache_file(), $content );
return $content;
}
Очевидно, что для этого требуется множество настроек, включая срок действия кэша, $cache_key
, который соответствует вашим потребностям, и обнаружение ошибок, поэтому плохие страницы не кэшируются.