Форум → Программирование → PHP для идиотов → if modified
if modified
-
Подскажите, как внедрить на сайт с каталогом продукции - сабж? У меня в голове пока решение одно, сделать в БД с текстом продукции столбец, который будет хранить дату последнего изменения текста, и когда будет передан запрос If-Modified-Since проверять скриптом дату и если что, отдавать либо страничку с кодом 200 либо 304 и exit(); Правильно? Или делается все иначе?
И еще не понятно, если страничка якобы не менялась, мы отдали заголовок 304, тогда браузер берет страничку из своего кеша, и выходит что юзер ее смотрит, а нам клик не засчитан, ведь код метрики или аналитики не сработал! Как же так? Как то не хорошо выходит…. -
Фев. 25, 2012, 7:34 д.п., спустя 7 часов 16 минут 41 секунду
1. открой для себя запрос HEAD
2. посмотри как на форумах сделано "новые сообщения". всё придумано до насιιlllιlllι унц-унц -
Фев. 25, 2012, 9:15 д.п., спустя 1 час 41 минуту 26 секунд
я думаю не будет большой проблемы, если страницы всегда будут браться с сервера, а не из кэша. даже, скажу, это идеологически правильно. статику можно кешировать хоть на 100500 лет вперёд (я на месяц кеширую)не всё полезно, что в swap полезло -
Фев. 25, 2012, 12:11 п.п., спустя 2 часа 56 минут 11 секунд
а нам клик не засчитан, ведь код метрики или аналитики не сработал!
где код метрики находится? -
Фев. 25, 2012, 2:31 п.п., спустя 2 часа 19 минут 34 секунды
Честно говоря пока не понял, как мне в итоге быть, читаю сейчас про HEAD запросы. Собственно мне это нужно не для кеширования, а для пауков яши и гугла, что бы мои 1000+ товаров побыстрее проиндексировались, ну и + видя, что есть last modified я уверен добавит весу сайту.
Пока что дошло вот этогде код метрики находится?
-т.е код в закешированной страничке также сработает, ок. -
Март 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? И на сколько я понимаю, если в шаблоне внешнего вида я что-то поменяю, то придется изменить время для всех данных в базе?
Пожалуйста, авторизуйтесь, чтобы написать комментарий!