Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

[WD] Last-Modified header

Форум для авторов модов для phpBB 2.0.x.
Аватара пользователя
Vladson
Former team member
Сообщения: 816
Стаж: 20 лет
Откуда: Estonia, Tallinn

[WD] Last-Modified header

Сообщение Vladson »

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

Мод предназначен для посылки сервером заголовка 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
Меня в частности интересует нужно ли мне париться и продолжать в том-же духе, или это всё равно никому не нужно ?
Серый цвет - светлый (светлее чёрного), но он и тёмный (темнее белого), он же промежуточный (между чёрным и белым). Теорию относительности никто не отменял. Истина в целом - понятие виртуально-ситуативное.
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Стаж: 19 лет 6 месяцев
Откуда: оттуда

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

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).
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Егор Наклоняев писал(а):Дело в том, что есть шанс тогда задолбать всех пользователей всплывающим окном, что мне уже один раз удалось.
Можно с этого места подробнее?
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Стаж: 19 лет 6 месяцев
Откуда: оттуда

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

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

Либо, напротив, окошко выскакивать не будет.
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Если уж вести речь о поисковой оптимизации, то можно выдавать заголовки только гостям.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Vladson
Former team member
Сообщения: 816
Стаж: 20 лет
Откуда: Estonia, Tallinn

Сообщение Vladson »

Егор Наклоняев писал(а):Хотя, данный SQL запрос вполне оправдан и достаточно шустрый.
Если я решу всё-же идти до конца то этот запрос будет другим и в другои месте (т.е будет брать не последнюю доступную дату, а именно ту дату когда страница была реально изменена) но для этого нужно будет делать это не в хедере а мудрить какую нибудь систему в index, viewtopic и.т.д.
Однако "шанс задолбать всех пользователей" меня чесно говоря напугал.
Xpert писал(а):Если уж вести речь о поисковой оптимизации
Не только о ней, тут скорее речь о моей тяге делать всё по стандартам, но побочный эффект поисковой оптимизации (который меня и сподвиг на это дело) явно присутствует :)
Серый цвет - светлый (светлее чёрного), но он и тёмный (темнее белого), он же промежуточный (между чёрным и белым). Теорию относительности никто не отменял. Истина в целом - понятие виртуально-ситуативное.
Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Стаж: 18 лет 11 месяцев
Откуда: Оренбург (Южный Урал)
Благодарил (а): 3 раза

Сообщение Поручик »

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

Брошу свои пять копеек.
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
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 5 месяцев
Поблагодарили: 1 раз

Сообщение VVVas »

Vladson писал(а):Меня в частности интересует нужно ли мне париться и продолжать в том-же духе, или это всё равно никому не нужно ?
Нужно.
я люблю daft punk | новый sugoi.ru
Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Стаж: 18 лет 11 месяцев
Откуда: Оренбург (Южный Урал)
Благодарил (а): 3 раза

Сообщение Поручик »

Вот, оцените идею

Код: Выделить всё

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
Oleg1
phpBB 1.0.0
Сообщения: 3
Стаж: 17 лет 10 месяцев

Last-Modified

Сообщение Oleg1 »

Нужная вещь!

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

жду обновлений! :-)
VovikV
phpBB 1.4.4
Сообщения: 119
Стаж: 18 лет 5 месяцев

Сообщение VovikV »

VVVas писал(а):Нужно.
Присоединяюсь
Не развивалась идея?
Аватара пользователя
Vladson
Former team member
Сообщения: 816
Стаж: 20 лет
Откуда: Estonia, Tallinn

Сообщение Vladson »

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

Уж если идея нужная надеюсь кто нибудь ещё её подхватит...
Серый цвет - светлый (светлее чёрного), но он и тёмный (темнее белого), он же промежуточный (между чёрным и белым). Теорию относительности никто не отменял. Истина в целом - понятие виртуально-ситуативное.
VovikV
phpBB 1.4.4
Сообщения: 119
Стаж: 18 лет 5 месяцев

Сообщение VovikV »

Если я правильно понимаю, что врядли, у Поручика выдается не одна и та же дата а текущая дата, но если пост уже просматривался и интервал обновления не истек, то выдается 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']);
Хорошей, же полезный мод может получится и для поисковиков и для людей полезный.
Аватара пользователя
Rasty
phpBB 1.4.3
Сообщения: 77
Стаж: 17 лет 7 месяцев
Откуда: Троещина

Сообщение Rasty »

Поручик писал(а):Вот, оцените идею

Код: Выделить всё

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:
Аватара пользователя
The-eBook
phpBB 2.0.0
Сообщения: 230
Стаж: 19 лет 4 месяца
Откуда: Москва

Сообщение The-eBook »

Vladson писал(а):Меня в частности интересует нужно ли мне париться и продолжать в том-же духе, или это всё равно никому не нужно ?
Нужно! А то трафик становится ужасающим!
The-eBook
Проект электронных книг
www.the-ebook.org

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