Кэширование

Статус
В этой теме нельзя размещать новые ответы.

Ozz99

Постоялец
Регистрация
15 Май 2009
Сообщения
199
Реакции
169
Как можно сделать, что бы сайт кешировался?

Страницы выводятся с базы при помощи запроса


Что надо написать, что бы эти страницы кэшировались, скажем обновлялись только при добавление комментария. Коменты добавляются при помощи


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

PHP:
<?
//файл кэша
$global_cached_filename = 'cache/'.md5($_SERVER['REQUEST_URI']).'.html';   

//неизвестно закешировано ли
$global_cached = false;

//кэшировать
$make_cache = true;


//есть ли кэш за последние 3600 секунд
if (file_exists($global_cached_filename)) {
    $global_cached_filename_timeout = time() - filemtime($global_cached_filename);
    if ((time()-filemtime($global_cached_filename))<3600) {
        $global_cached = true;
    } else {
        //если есть старый то удаляем
        unlink($global_cached_filename);
        $global_cached = false;
    }
}

//если есть post тогда без кэша и не кэшировать
if(count($_POST)){
    $make_cache = false;
    $global_cached = false;
}

if ($global_cached){
    //читаем кэш и отпровляем в буфер вывода
    echo 'Информация из кэша, возможность обновление через '.(3600-$global_cached_filename_timeout).' секунд.<br />';
    readfile($global_cached_filename);
} else {
    //включаем буфер
    if($make_cache)ob_start();
    //всё что далее не выводится а остаётся в буфере


    //начало страницы
    print_r($_POST);
    echo count($_POST);
    ?>
    <form method="post">
        <input name="test" type="text" value="<?=$_POST['test'] ?>" />
        <input name="post" type="submit" value="post" />
    </form>
    <?
    //конец страницы

    if($make_cache){
        //берём данные из буфера и сохраняем в кэш файл
        $text = ob_get_clean();
        $fh = fopen($global_cached_filename, 'w+');
        fwrite($fh, $text);
        fclose($fh);
        //выводин информацию буфера
        echo $text;
    }
}
?>
ещё можно сохранять (gzencode) и отправлять в браузер (readgzfile) кэш в gzip уменьшается траффик и место для кэша.
 
А это дело надо в каждую страницу вставить?
 
если все страницы идут через index.php тогда достаточно только там сделать, кэшируется по ссылке, если для каждой страницы используется новый php файл (pages.php, contacts.php...) тогда надо в каждый файл вставлят. Для такого случая самый быстрый способ использовать php переменные auto_prepend_file, auto_append_file, они указывают какие файлы прикрепить в начало и конец всех php файлов.

создать .htaccess:
php_value auto_prepend_file /home/site/public_html/site/_start_cache.php
php_value auto_append_file /home/site/public_html/site/_end_cache.php

если php как cgi то php.ini:
auto_prepend_file = /home/site/public_html/site/_start_cache.php
auto_append_file = /home/site/public_html/site/_end_cache.php

дальше в файлы записать код который должен запустится до начала страницы и после.
 
Хе, не надо тебе серверных кэшей ;) до них тебе еще далеко.
Поставь в заголовке строку
header("Expires: Sat, 26 Yanl 2010 05:00:00 GMT");
где в ковычках дата и время твоего последнего камента - и будет тебе счастье - страница закешируется в броузере клиента до следующего коментария...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху