ФорумПрограммированиеPHP для идиотов → if modified

if modified

  • kolobok

    Сообщения: 48 Репутация: N Группа: Кто попало

    Spritz Фев. 25, 2012, 12:17 д.п.

    Подскажите, как внедрить на сайт с каталогом продукции - сабж? У меня в голове пока решение одно, сделать в БД с текстом продукции столбец, который будет хранить дату последнего изменения текста, и когда будет передан запрос If-Modified-Since проверять скриптом дату и если что, отдавать либо страничку с кодом 200 либо 304 и exit(); Правильно? Или делается все иначе?

    И еще не понятно, если страничка якобы не менялась, мы отдали заголовок 304, тогда браузер берет страничку из своего кеша, и выходит что юзер ее смотрит, а нам клик не засчитан, ведь код метрики или аналитики не сработал! Как же так? Как то не хорошо выходит….
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Фев. 25, 2012, 7:34 д.п., спустя 7 часов 16 минут 41 секунду

    1. открой для себя запрос HEAD

    2. посмотри как на форумах сделано "новые сообщения". всё придумано до нас
    ιιlllιlllι унц-унц
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Фев. 25, 2012, 9:15 д.п., спустя 1 час 41 минуту 26 секунд

    я думаю не будет большой проблемы, если страницы всегда будут браться с сервера, а не из кэша. даже, скажу, это идеологически правильно. статику можно кешировать хоть на 100500 лет вперёд (я на месяц кеширую)
    не всё полезно, что в swap полезло
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz Фев. 25, 2012, 12:11 п.п., спустя 2 часа 56 минут 11 секунд

    а нам клик не засчитан, ведь код метрики или аналитики не сработал!

    где код метрики находится?
  • kolobok

    Сообщения: 48 Репутация: N Группа: Кто попало

    Spritz Фев. 25, 2012, 2:31 п.п., спустя 2 часа 19 минут 34 секунды

    Честно говоря пока не понял, как мне в итоге быть, читаю сейчас про HEAD запросы. Собственно мне это нужно не для кеширования, а для пауков яши и гугла, что бы мои 1000+ товаров побыстрее проиндексировались, ну и + видя, что есть last modified я уверен добавит весу сайту.
    Пока что дошло вот это
    где код метрики находится?
    -т.е код в закешированной страничке также сработает, ок.
  • kolobok

    Сообщения: 48 Репутация: N Группа: Кто попало

    Spritz Март 26, 2012, 12:38 п.п., спустя 29 дней 22 часа 7 минут

    Прописал для теста такой код:
    $LastModified_unix = 1330704863;
    $LastModified = gmdate("D, d M Y H:i:s \G\M\T", $LastModified_unix);

    $IfModifiedSince = false;
    if (isset($_ENV['HTTP_IF_MODIFIED_SINCE']))
    $IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));
    if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
    $IfModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
    if ($IfModifiedSince >= $LastModified_unix) {
    header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
    header('Last-Modified: '. $LastModified);
    exit;
    }
    header('Last-Modified: '. $LastModified);


    Попробовал проверить, сайт http://last-modified.com/ru/ говорит, что сайт проверку на 304 не прошел, хотя в заголовках вроде как все ок:
    304 Not Modified не найден!
    HTTP/1.1 304
    Server: nginx
    Date: Mon, 26 Mar 2012 08:32:52 GMT
    Content-Type: text/html; charset=UTF-8
    Connection: close
    Last-Modified: Fri, 02 Mar 2012 16:14:23 GMT
    Получено: 173 байт
    Затрачено: 0,16 сек

    Проверялка от http://www.feedthebot.com/tools/if-modified/ говорит что все ок. Думаю, что действительно все ок. Теперь создам в базе где надо время изменения данных. Какой формат лучше использовать, unix time? И на сколько я понимаю, если в шаблоне внешнего вида я что-то поменяю, то придется изменить время для всех данных в базе?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!