Last-Modified и время последней модификации

ByDmitriy Altuhov

Last-Modified и время последней модификации

Как приятно, когда браузер проверяет свежая ли у нас копия страницы в кеше или нет. И, если она свежая, то загружает её из кеша.

Это значительно ускоряет загрузку страниц и уменьшет нагрузку на сервер и трафик.

Код для “статичных” PHP-файлов (которые не работают с базами данных), модернизированный для работы с модульной архитектурой (при которой header и footer подгружаются из отдельных скриптов):

<?php

$filescrpt=$_SERVER[‘SCRIPT_FILENAME’];
$filehdr1=$_SERVER[‘DOCUMENT_ROOT’].”/header1.php”;
$filehdr2=$_SERVER[‘DOCUMENT_ROOT’].”/header2.php”;
$fileftr=$_SERVER[‘DOCUMENT_ROOT’].”/footer.php”;

$last_modified_time = max(filemtime($filescrpt),filemtime($filehdr1),filemtime($filehdr2),filemtime($fileftr));
#$etag = md5_file($file);
$etag = $last_modified_time;

header(“Last-Modified: “.gmdate(“D, d M Y H:i:s”, $last_modified_time).” GMT”);
header(“Etag: $etag”);

if (@strtotime($_SERVER[‘HTTP_IF_MODIFIED_SINCE’]) >= $last_modified_time ||
trim($_SERVER[‘HTTP_IF_NONE_MATCH’]) == $etag) {
header(“HTTP/1.1 304 Not Modified”);
exit;
}

?>Для динамичных PHP-файлов (которые берут данные из баз данных) код будет аналогичный, только $last_modified_time должно соответствовать дате последней модификации записи в БД. $etag нужно вычислять через md5 того основного контента, который берётся из БД.

About the author

Dmitriy Altuhov administrator