Пропустить

[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
Former team member
 
Сообщения: 821
Зарегистрирован: 27.04.2004 6:07
Откуда: Estonia, Tallinn
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Егор Наклоняев » 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).
Аватара пользователя
Егор Наклоняев
phpBB 2.0.12
 
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

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

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

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

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

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

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

Либо, напротив, окошко выскакивать не будет.
Аватара пользователя
Егор Наклоняев
phpBB 2.0.12
 
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

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

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

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

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

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

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

Не только о ней, тут скорее речь о моей тяге делать всё по стандартам, но побочный эффект поисковой оптимизации (который меня и сподвиг на это дело) явно присутствует :)
Серый цвет - светлый (светлее чёрного), но он и тёмный (темнее белого), он же промежуточный (между чёрным и белым). Теорию относительности никто не отменял. Истина в целом - понятие виртуально-ситуативное.
Аватара пользователя
Vladson
Former team member
 
Сообщения: 821
Зарегистрирован: 27.04.2004 6:07
Откуда: Estonia, Tallinn
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Поручик » 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-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

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

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

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

Нужно.
Аватара пользователя
VVVas
Former team member
 
Сообщения: 4458
Зарегистрирован: 12.11.2004 1:20
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.

Сообщение Поручик » 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-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

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

Last-Modified

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

Нужная вещь!

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

жду обновлений! :-)

Oleg1
phpBB 1.0.0
 
Сообщения: 3
Зарегистрирован: 15.06.2006 0:19
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

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

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

Присоединяюсь
Не развивалась идея?

VovikV
phpBB 2.0.0
 
Сообщения: 119
Зарегистрирован: 21.11.2005 8:15
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

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

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

Уж если идея нужная надеюсь кто нибудь ещё её подхватит...
Серый цвет - светлый (светлее чёрного), но он и тёмный (темнее белого), он же промежуточный (между чёрным и белым). Теорию относительности никто не отменял. Истина в целом - понятие виртуально-ситуативное.
Аватара пользователя
Vladson
Former team member
 
Сообщения: 821
Зарегистрирован: 27.04.2004 6:07
Откуда: Estonia, Tallinn
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение 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.0
 
Сообщения: 119
Зарегистрирован: 21.11.2005 8:15
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение 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
 
Сообщения: 79
Зарегистрирован: 23.09.2006 22:07
Откуда: Троещина
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

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

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

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


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

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

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

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Место для вашей рекламы