Установка правильного Last-Modified

Sayitright
На сайте с 21.10.2009
Offline
43
782

На php сайте зачастую возникает проблема: не отдаётся верный заголовок обновления страницы. Поможет ли этот код решить проблему, будет ли отдавать верная дата изменения?

$date = time();

$last_modified = gmdate('D, d M Y H:i:s', $date) . ' GMT';

if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {

$if_modified_since = preg_replace('/;.*$/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE']);

if ($if_modified_since == $last_modified) {

header('HTTP/1.0 304 Not Modified');

header('Cache-Control: max-age=86400, must-revalidate');

exit;

}

}

header('Cache-Control: max-age=86400, must-revalidate');

header('Last-Modified: ' . $last_modified);

Спасибо тем, кто помогает!
[umka]
На сайте с 25.05.2008
Offline
456
#1

В идеале лучше делать так, чтобы каждый php-скрипт, принимающий участие в генерации страницы, добавлял в глобальный массив $last_modified элемент с датой изменения себя (скрипта) и, если он берёт что-то из базы (например, новости), также добавлял элементы с датами записей из базы.

В итоге у нас получится массив с разными датами (timstamp).

Затем, берём из этого массива элемент с наибольшим значением, и это получается актуальная дата последнего изменения.

Её-то мы и отдаём в заголовке Last-Modified.

Соответственно, если запрос приходит с If-Modified-Since, то сравниваем даты и отдаём или не отдаём контент.

Это всё моё ИМХО :)

Возможно, как-то всё можно сделать ещё красивей.

Лог в помощь!
Sayitright
На сайте с 21.10.2009
Offline
43
#2

А как наиболее правильно написать тз программисту, чтобы исправил эту проблему для php сайта?

[umka]
На сайте с 25.05.2008
Offline
456
#3

Это не проблема. Это задача.

Программисту её нужно озвучить примерно так: "Хочу, чтобы на всех страницах выдавался корректный Last-Modified!" :)

А как он будет это делать, уже его проблема :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий