Кэширование

Тема в разделе "PHP", создана пользователем Ozz99, 18 янв 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Ozz99

    Ozz99

    Регистр.:
    15 май 2009
    Сообщения:
    201
    Симпатии:
    168
    Как можно сделать, что бы сайт кешировался?

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

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

    Может я написал ерунду, а если нет, то посоветуйте
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    например кэширование страницы в файл в каталог 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 уменьшается траффик и место для кэша.
     
    Ozz99 нравится это.
  3. Ozz99

    Ozz99

    Регистр.:
    15 май 2009
    Сообщения:
    201
    Симпатии:
    168
    А это дело надо в каждую страницу вставить?
     
  4. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    если все страницы идут через 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

    дальше в файлы записать код который должен запустится до начала страницы и после.
     
    Ozz99 нравится это.
  5. krenkus

    krenkus Создатель

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