[WD] Last-Modified header

Форум для авторов модов для phpBB 2.0.x. Здесь можно попросить помощи в разработке у коллег.

[WD] Last-Modified header

Сообщение Vladson 15.12.2005 10:13

Я смотрю мои моды не пользуются особой популярностью в виду не особой их необходимости, но всё равно напишу ещё один безполезный полу-мод...

Мод предназначен для посылки сервером заголовка Last-Modified
это в принципе простому пользователю не нужно, однако я не уверен точно но возможно это кому-то и зачем-то нужно...

Дело в том что теоретически я хочу сделать мод полностью эмулирующий статику (заголовок Last-Modified играет в этом не последнюю роль) но этот мод очень обширный и по этому я веду разрабоку по частям...

После доработки он будет лучше а пока что...
Всё что надо сделать это открыть файл includes/page_header.php и после строки
Код: Выделить всё
define('HEADER_INC', TRUE);

добавить код
Код: Выделить всё
//--> Last-Modified header by Vladson
$sql = "SELECT post_time
   FROM " . POSTS_TABLE . "
   ORDER BY post_time DESC
   LIMIT 1;";
if( !($result = $db->sql_query($sql)) )
{
   message_die(GENERAL_ERROR, 'Could not obtain user/online information', '', __LINE__, __FILE__, $sql);
}
if ( $temp = $db->sql_fetchrow($result) )
{
   header('Last-Modified: ' . date('r', $temp['post_time']));
}
//<-- Last-Modified header by Vladson


Меня в частности интересует нужно ли мне париться и продолжать в том-же духе, или это всё равно никому не нужно ?
Серый цвет светлый (светлее чёрного) и серый цвет тёмный (темнее белого) и серый цвет средний (между чёрным и белым).
Сколько бы мнений ни было все правда, а истины просто нет. Любой кто думает что докопался до истины всего лишь выдумал себе свою правду.
Хотя возможно просто поверил в чужую ложь...
Аватара пользователя
Vladson
phpBB 2.0 RC-1 (pre)
phpBB 2.0 RC-1 (pre)
 
Сообщения: 1036
Зарегистрирован: 27.04.2004 6:07
Откуда: Estonia, Tallinn


Сообщение Егор Наклоняев 15.12.2005 10:43

Vladson писал(а):Мод предназначен для посылки сервером заголовка Last-Modified
это в принципе простому пользователю не нужно, однако я не уверен точно но возможно это кому-то и зачем-то нужно...


Если оставить только заголовок, но не обрабатывать его в дальнейшем, это будет нужно некоторым поисковым системам и ускорит индексацию. Для того, чтобы это работало согласно HTTP протокола, нужно еще обрабатывать запрос к серверу, но тут подстерегает тонкий момент. Дело в том, что есть шанс тогда задолбать всех пользователей всплывающим окном, что мне уже один раз удалось.

Vladson писал(а):date('r', $temp['post_time']));

Не совсем корректно. Возвращает дату в формате RFC 2822, а требуется несколько иное.
RFC 2616 писал(а):All HTTP date/time stamps MUST be represented in Greenwich Mean Time (GMT), without exception. For the purposes of HTTP, GMT is exactly equal to UTC (Coordinated Universal Time).
Аватара пользователя
Егор Наклоняев
Moderator
 
Сообщения: 417
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда

Сообщение Xpert 15.12.2005 10:47

Егор Наклоняев писал(а):Дело в том, что есть шанс тогда задолбать всех пользователей всплывающим окном, что мне уже один раз удалось.

Можно с этого места подробнее?
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
 
Сообщения: 5710
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru

Сообщение Егор Наклоняев 15.12.2005 11:01

Xpert писал(а):Можно с этого места подробнее?

Докладываю, где-то в разработках я уже пытался сделать обработку заголовков, правда не плодя при этом лишних SQL запросов.
Хотя, данный SQL запрос вполне оправдан и достаточно шустрый.
Так вот, допустим Вам пришло сообщение, возникает всплывающее окно. Вы на него сходили и вроде всё нормально.
В следующий раз Вы заходите на форум, и если там ничего не изменилось, то поскольку тогда будет использоваться кэшированная страница, то опять выскочит окошко уведомления.

Либо, напротив, окошко выскакивать не будет.
Аватара пользователя
Егор Наклоняев
Moderator
 
Сообщения: 417
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда

Сообщение Xpert 15.12.2005 11:06

Если уж вести речь о поисковой оптимизации, то можно выдавать заголовки только гостям.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
 
Сообщения: 5710
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru

Сообщение Vladson 15.12.2005 12:37

Егор Наклоняев писал(а):Хотя, данный SQL запрос вполне оправдан и достаточно шустрый.

Если я решу всё-же идти до конца то этот запрос будет другим и в другои месте (т.е будет брать не последнюю доступную дату, а именно ту дату когда страница была реально изменена) но для этого нужно будет делать это не в хедере а мудрить какую нибудь систему в index, viewtopic и.т.д.
Однако "шанс задолбать всех пользователей" меня чесно говоря напугал.

Xpert писал(а):Если уж вести речь о поисковой оптимизации

Не только о ней, тут скорее речь о моей тяге делать всё по стандартам, но побочный эффект поисковой оптимизации (который меня и сподвиг на это дело) явно присутствует :)
Серый цвет светлый (светлее чёрного) и серый цвет тёмный (темнее белого) и серый цвет средний (между чёрным и белым).
Сколько бы мнений ни было все правда, а истины просто нет. Любой кто думает что докопался до истины всего лишь выдумал себе свою правду.
Хотя возможно просто поверил в чужую ложь...
Аватара пользователя
Vladson
phpBB 2.0 RC-1 (pre)
phpBB 2.0 RC-1 (pre)
 
Сообщения: 1036
Зарегистрирован: 27.04.2004 6:07
Откуда: Estonia, Tallinn

Сообщение Поручик 15.12.2005 18:17

да, да, да. Такая мысль у меня не раз возникала, но куда-то потом пропадала.
------линия отреза--------

Брошу свои пять копеек.
Vladson писал(а): header('Last-Modified: ' . date('r', $temp['post_time']));

Код: Выделить всё
header("Last-Modified: ". gmdate("D, d M Y H:i:s", $temp['post_time']));


Xpert писал(а):Если уж вести речь о поисковой оптимизации, то можно выдавать заголовки только гостям.


А можно примерно так

используем код Vladson, далее
Код: Выделить всё
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) & (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])>=$temp['post_time']))
{
header ('Date: ' . gmdate ('D, d M Y H:i:s') . ' GMT');
header('HTTP/1.0 304 Not Modified');
exit;
}
else
{
header("Last-Modified: ".$temp['post_time']);
header("Cache-Control: max-age=2592000");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 10000). " GMT");
}



Народ, пример выдрал на скорую руку, так что не флеймить, плиз.
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB2 | FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/
Аватара пользователя
Поручик
Его Благородие
Его Благородие
 
Сообщения: 3669
Зарегистрирован: 12.05.2005 17:25
Откуда: Оренбург (Южный Урал)

Сообщение VVVas 15.12.2005 23:22

Vladson писал(а):Меня в частности интересует нужно ли мне париться и продолжать в том-же духе, или это всё равно никому не нужно ?

Нужно.
вы нарушили правила конференции, объяснений не будет - сами читайте правила
я люблю daft punk | Активные темы
Аватара пользователя
VVVas
Люмпен Пролетариат
Люмпен Пролетариат
 
Сообщения: 4737
Зарегистрирован: 12.11.2004 1:20
Откуда: RU-MSK

Сообщение Поручик 17.12.2005 14:33

Вот, оцените идею
Код: Выделить всё
function put_http_header()
{
   global $topic_id, $forum_id, $db, $userdata;
   if($userdata['session_logged_in']) return;
   $sql_and ="";
   if ($topic_id)
   {
      $sql_and = "p.topic_id = $topic_id AND ";
   }
   else if ($forum_id)
   {
      $sql_and = "p.forum_id = $forum_id AND ";
   }
   $sql = "SELECT p.post_time, pt.post_text
         FROM " . POSTS_TABLE . " p, " . POSTS_TEXT_TABLE . " pt
            WHERE $sql_and pt.post_id = p.post_id
            ORDER BY p.post_time DESC LIMIT 1";
   if (!($result = $db->sql_query($sql)))
   {
      message_die(GENERAL_ERROR, 'Could not query new post information', '', __LINE__, __FILE__, $sql);
   }
   $row = $db->sql_fetchrow($result);
   $db->sql_freeresult($result);
   $upd_time = $row['post_time'];
   $tag='"PUB' . crc32($row['post_text']) . '"';
   $no_update=TRUE; // no update, as default
   if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])>=$upd_time))
   {
      $no_update=FALSE;
   }
   if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) { // check ETag
      if (strcmp($_SERVER['HTTP_IF_NONE_MATCH'], $tag) == 0) $no_update=FALSE;
        else $no_update=TRUE;
   }
    if (!$no_update) {
      if (function_exists("getallheaders")) @header('HTTP/1.1 304 Not Modified');
      else @header('Status: 304 Not Modified');
      @header("Date: " . gmdate('D, d M Y H:i:s') . ' GMT');
    }
   @header("ETag: $tag");  // The new TAG
   @header("Last-Modified: ". gmdate('D, d M Y H:i:s', $upd_time) . ' GMT');
    if (!$no_update) exit;
}

Затащил эту функцию в index.php, viewtopic.php, viewforum.php.
Отсылка заголовков работает только для гостей.
Недостаток функции: не учитывает сообщения, находящиеся в закрытых для незарегистрированных пользователей (роботов) разделах.
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB2 | FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/
Аватара пользователя
Поручик
Его Благородие
Его Благородие
 
Сообщения: 3669
Зарегистрирован: 12.05.2005 17:25
Откуда: Оренбург (Южный Урал)

Last-Modified

Сообщение Oleg1 15.06.2006 0:24

Нужная вещь!

Но сейчас немного криво, т.к. по всем темам и подтемам выдаётся одна и таже Last-Modified.. это не есть ГУТ.
каждой странице нужна своя Last-Modified:

жду обновлений! :-)
Oleg1
phpBB 1.0.0
 
Сообщения: 3
Зарегистрирован: 15.06.2006 0:19

Сообщение VovikV 26.07.2006 8:12

VVVas писал(а):Нужно.

Присоединяюсь
Не развивалась идея?
VovikV
phpBB 2.0.1
 
Сообщения: 127
Зарегистрирован: 21.11.2005 8:15

Сообщение Vladson 26.07.2006 9:20

Развития этого мода ждать пока не приходится...

Уж если идея нужная надеюсь кто нибудь ещё её подхватит...
Серый цвет светлый (светлее чёрного) и серый цвет тёмный (темнее белого) и серый цвет средний (между чёрным и белым).
Сколько бы мнений ни было все правда, а истины просто нет. Любой кто думает что докопался до истины всего лишь выдумал себе свою правду.
Хотя возможно просто поверил в чужую ложь...
Аватара пользователя
Vladson
phpBB 2.0 RC-1 (pre)
phpBB 2.0 RC-1 (pre)
 
Сообщения: 1036
Зарегистрирован: 27.04.2004 6:07
Откуда: Estonia, Tallinn

Сообщение VovikV 26.07.2006 11:22

Если я правильно понимаю, что врядли, у Поручика выдается не одна и та же дата а текущая дата, но если пост уже просматривался и интервал обновления не истек, то выдается 304 Not Modified
По моему текущая дата для поисковика не очень хорошо, может лучше в viewtopic.php использовать для Last-Modified чегонить вроде этого?
Код: Выделить всё
$lm_post_date = create_date("D, d M Y H:i:s", $postrow[$total_posts]['post_created'], $board_config['board_timezone']);


Хорошей, же полезный мод может получится и для поисковиков и для людей полезный.
VovikV
phpBB 2.0.1
 
Сообщения: 127
Зарегистрирован: 21.11.2005 8:15

Сообщение Rasty 06.02.2007 16:34

Поручик писал(а):Вот, оцените идею
Код: Выделить всё
function put_http_header()
{
}

Затащил эту функцию в index.php, viewtopic.php, viewforum.php.
Отсылка заголовков работает только для гостей.
Недостаток функции: не учитывает сообщения, находящиеся в закрытых для незарегистрированных пользователей (роботов) разделах.


а includes/page_header.php не трогать? и как можно проверить, работает оно или нет?..

Добавлено спустя 2 часа 54 минуты 47 секунд:

изменил includes/page_header.php

добавил function put_http_header() в index.php, viewtopic.php, viewforum.php.

Егор Наклоняев писал(а):Так вот, допустим Вам пришло сообщение, возникает всплывающее окно. Вы на него сходили и вроде всё нормально.
В следующий раз Вы заходите на форум, и если там ничего не изменилось, то поскольку тогда будет использоваться кэшированная страница, то опять выскочит окошко уведомления.

Либо, напротив, окошко выскакивать не будет.

что с этим можно сделать?

Добавлено спустя 6 минут 18 секунд:

куда эту функцию put_http_header() вписывать?... сразу после <?php ?

Добавлено спустя 8 минут 3 секунды:

что куда вписывать, чтобы правильно работало??? :( :cry:
Аватара пользователя
Rasty
phpBB 1.4.4
 
Сообщения: 91
Зарегистрирован: 23.09.2006 22:07
Откуда: Троещина

Сообщение The-eBook 22.11.2007 17:08

Vladson писал(а):Меня в частности интересует нужно ли мне париться и продолжать в том-же духе, или это всё равно никому не нужно ?

Нужно! А то трафик становится ужасающим!
The-eBook
Проект электронных книг
www.the-ebook.org
Аватара пользователя
The-eBook
phpBB 2.0.8
 
Сообщения: 317
Зарегистрирован: 11.12.2004 12:22
Откуда: Москва


Вернуться в Для авторов (phpBB 2.0.x)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0