Всем привет!
Тут мы обсудим работу с заголовком 304 Not Modified на PHP. Здесь вы не найдете подробного разжевывания работы функций, но представлен простой фрагмент кода, который решит эту задачу.
Этот материал может помочь новичкам разобраться в теме, как добиться правильного отображения текущего состояния сайта в браузерах пользователя. Дабы не вдаваться в подробности кеширования файлов сайта на стороне браузеров, прокси серверов, и не лезть в настройки веб сервера (ну мало ли просто не хочется), особенно если есть навыки работы в PHP, предлагаю ознакомиться с моим постом!
Хочу с вами поделиться своей идеей, а точнее, просто способом, которым я реализовал отдачу заголовков LastModified и Not Modified, в случае, когда сайт собран из блоков + файлы таблиц стилей, прочих подключаемых файлов. (Изменив один из блоков, закешированный сайт продолжает отображаться в старом варианте — в браузерах пользователей).
Для решения этой проблемы достаточно добавить этот код в самый верх страницы, предварительно проработав его под свои файлы сайта.
Работа такого блока кода достаточно проста пониманию, но на заре своих опытов в программировании, пока я еще не определился с тем, чему хочу посвятить свою дальнейшую деятельность, эта тематика мне доставила достаточно много хлопот, поскольку дорвеи и прочие сайты (как сделать сайт самому) не могли мне тут помочь, и мне пришлось начать разбираться в PHP с самых базовых основ и возможностей.
1. Определим время последнего изменения текущей страницы, и прочих блоков php (включая и файл CSS и какие угодно другие файлы) и присвоим дексрипторы этих таймштампов в переменные.
2. Далее следует стандартный алгоритм выбора большего числа с занесением его в третью переменную. Подробно описывать не буду.
3. И когда известен самый свежий блок, которых у нас в странице много, мы возьмем его время изменения и присвоим это значение нашей странице, не забыв перевести из формата тайм штамп в формат GMT
gmdate(«D, d M Y H:i:s \G\M\T», $LastModified_unix);
4. При первом обращении браузера к серверу, браузер получит всю страницу целиком и время изменения страницы.
5. При последующем обращении, браузер отправит серверу это значение времени, и, если в нашей странице ничего не менялось, получит ответ Not Modified. Страница не будет передана в браузер.
<?php
$tekuchaya_page = filemtime(«index.php»);
$aas1 = filemtime(«page_bloks/bottom.php»);
$aas2 = filemtime(«page_bloks/header.php»);
$aas3 = filemtime(«page_bloks/links.php»);
$aas4 = filemtime(«page_bloks/linksLeft.php»);
$aas5 = filemtime(«page_bloks/meta.php»);
$aas6 = filemtime(«page_bloks/styles.php»);
if($tekuchaya_page>=$aas1){
$timetime = $tekuchaya_page;
}
else {
$timetime = $aas1;
}
if($aas2>=$timetime){
$timetime = $aas2;
}
if($aas3>=$timetime){
$timetime = $aas3;
}
if($aas4>=$timetime){
$timetime = $aas4;
}
if($aas5>=$timetime){
$timetime = $aas5;
}
if($aas6>=$timetime){
$timetime = $aas6;
}
$LastModified_unix = $timetime; // время последнего изменения страницы
$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 && $IfModifiedSince >= $LastModified_unix) {
header($_SERVER['SERVER_PROTOCOL']. ' 304 Not Modified');
exit;
}
header('Last-Modified: '. $LastModified);
header('Content-type: text/html; charset=utf-8');
?>
Тут мы обсудим работу с заголовком 304 Not Modified на PHP. Здесь вы не найдете подробного разжевывания работы функций, но представлен простой фрагмент кода, который решит эту задачу.
Этот материал может помочь новичкам разобраться в теме, как добиться правильного отображения текущего состояния сайта в браузерах пользователя. Дабы не вдаваться в подробности кеширования файлов сайта на стороне браузеров, прокси серверов, и не лезть в настройки веб сервера (ну мало ли просто не хочется), особенно если есть навыки работы в PHP, предлагаю ознакомиться с моим постом!
Хочу с вами поделиться своей идеей, а точнее, просто способом, которым я реализовал отдачу заголовков LastModified и Not Modified, в случае, когда сайт собран из блоков + файлы таблиц стилей, прочих подключаемых файлов. (Изменив один из блоков, закешированный сайт продолжает отображаться в старом варианте — в браузерах пользователей).
Для решения этой проблемы достаточно добавить этот код в самый верх страницы, предварительно проработав его под свои файлы сайта.
Работа такого блока кода достаточно проста пониманию, но на заре своих опытов в программировании, пока я еще не определился с тем, чему хочу посвятить свою дальнейшую деятельность, эта тематика мне доставила достаточно много хлопот, поскольку дорвеи и прочие сайты (как сделать сайт самому) не могли мне тут помочь, и мне пришлось начать разбираться в PHP с самых базовых основ и возможностей.
1. Определим время последнего изменения текущей страницы, и прочих блоков php (включая и файл CSS и какие угодно другие файлы) и присвоим дексрипторы этих таймштампов в переменные.
2. Далее следует стандартный алгоритм выбора большего числа с занесением его в третью переменную. Подробно описывать не буду.
3. И когда известен самый свежий блок, которых у нас в странице много, мы возьмем его время изменения и присвоим это значение нашей странице, не забыв перевести из формата тайм штамп в формат GMT
gmdate(«D, d M Y H:i:s \G\M\T», $LastModified_unix);
4. При первом обращении браузера к серверу, браузер получит всю страницу целиком и время изменения страницы.
5. При последующем обращении, браузер отправит серверу это значение времени, и, если в нашей странице ничего не менялось, получит ответ Not Modified. Страница не будет передана в браузер.
<?php
$tekuchaya_page = filemtime(«index.php»);
$aas1 = filemtime(«page_bloks/bottom.php»);
$aas2 = filemtime(«page_bloks/header.php»);
$aas3 = filemtime(«page_bloks/links.php»);
$aas4 = filemtime(«page_bloks/linksLeft.php»);
$aas5 = filemtime(«page_bloks/meta.php»);
$aas6 = filemtime(«page_bloks/styles.php»);
if($tekuchaya_page>=$aas1){
$timetime = $tekuchaya_page;
}
else {
$timetime = $aas1;
}
if($aas2>=$timetime){
$timetime = $aas2;
}
if($aas3>=$timetime){
$timetime = $aas3;
}
if($aas4>=$timetime){
$timetime = $aas4;
}
if($aas5>=$timetime){
$timetime = $aas5;
}
if($aas6>=$timetime){
$timetime = $aas6;
}
$LastModified_unix = $timetime; // время последнего изменения страницы
$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 && $IfModifiedSince >= $LastModified_unix) {
header($_SERVER['SERVER_PROTOCOL']. ' 304 Not Modified');
exit;
}
header('Last-Modified: '. $LastModified);
header('Content-type: text/html; charset=utf-8');
?>