Мод Fully integrated shoutbox

Ответы на вопросы, связанные с модами для phpBB 2.0.x, кроме относящихся к форуму Для авторов (phpBB 2.0.x).
Закрыто
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

Мод Fully integrated shoutbox

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

Скачать с phpbbGuru

Drupal refreshe

Сделал у себя кое-какие изменения, может кого заинтересует:
1. В таблице phpbb_shout cоздал индекс для shout_session_time
2. Внес изменения в shoutbox_view.php (Изменения выделены жирным)
<?php
/***************************************************************************
* shoutbox_view.php
* -------------------
* begin : Feb, 2003
* author : Niels Chr. Denmark <ncr@db9.dk> (http://mods.db9.dk)
*
* version 0.9.3
*
* History:
* 0.9.0. - initial BETA
* 0.9.1. - header added
* 0.9.2. - now support cenzored words
* 0.9.3. - username is a link to users profile
*
* a fully phpBB2 integrated shoutbox
*
***************************************************************************/

/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/

define('IN_PHPBB', true);
$phpbb_root_path = './';
require_once($phpbb_root_path . 'extension.inc');
require_once($phpbb_root_path . 'common.'.$phpEx);
require_once($phpbb_root_path . 'includes/bbcode.'.$phpEx);
define ('NUM_SHOUT', 20);

//
// gzip_compression
//
$do_gzip_compress = FALSE;
if ( $board_config['gzip_compress'] )
{
$phpver = phpversion();
$useragent = (isset($_SERVER["HTTP_USER_AGENT"]) ) ? $_SERVER["HTTP_USER_AGENT"] : $HTTP_USER_AGENT;
if ( $phpver >= '4.0.4pl1' && ( strstr($useragent,'compatible') || strstr($useragent,'Gecko') ) )
{
if ( extension_loaded('zlib') )
{
ob_start('ob_gzhandler');
}
}
else if ( $phpver > '4.0' )
{
if ( strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], 'gzip') )
{
if ( extension_loaded('zlib') )
{
$do_gzip_compress = TRUE;
ob_start();
ob_implicit_flush(0);

header('Content-Encoding: gzip');
}
}
}
}
// end gzip block

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_SHOUTBOX);
init_userprefs($userdata);
//
// End session management
//

//
// Start auth check
//
switch ($userdata['user_level'])
{
case ADMIN :
case MOD : $is_auth['auth_mod'] = 1;
default:
$is_auth['auth_read'] = 1;
$is_auth['auth_view'] = 1;
if ($userdata['user_id']==ANONYMOUS)
{
$is_auth['auth_delete'] = 0;
$is_auth['auth_post'] = 0;
} else
{
$is_auth['auth_delete'] = 1;
$is_auth['auth_post'] = 1;
}
}

if( !$is_auth['auth_read'] )
{
message_die(GENERAL_MESSAGE, $lang['Not_Authorised']);
}

//
// End auth check
//

$sql="SELECT MAX(shout_session_time) as tm FROM " . SHOUTBOX_TABLE;
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not get shoutbox information', '', __LINE__, __FILE__, $sql);
}
$row=$db->sql_fetchrow($result);
$shout_time=$row['tm'];
$MyETag='"SH'.gmdate("YmdHis", $shout_time).$verinfo.'"';
$MyGMTtime=gmdate("D, d M Y H:i:s", $shout_time)." GMT";
header("Last-Modified: ".$MyGMTtime);
header("Etag: ".$MyETag);
header("Expires: ".gmdate("D, d M Y H:i:s", time())." GMT");
if(isset($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'])) {
if ($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'] == $MyETag) {
header("HTTP/1.1 304 Not Modified");
exit;
}
}
else {
if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'])) {
if ($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'] == $MyGMTtime) {
header("HTTP/1.1 304 Not Modified");
exit;
}
}}

// see if we need offset
if (isset($HTTP_POST_VARS['start']) || isset($HTTP_GET_VARS['start']))
{
$start=(isset($HTTP_POST_VARS['start'])) ? intval($HTTP_POST_VARS['start']) : intval($HTTP_GET_VARS['start']);
} else $start=0;

$template->set_filenames(array(
'body' => 'shoutbox_view_body.tpl'));

//
// Define censored word matches
//
$orig_word = array();
$replacement_word = array();
obtain_word_list($orig_word, $replacement_word);

//
// display the shoutbox
//
$sql = "SELECT s.*, u.user_allowsmile, u.username FROM " . SHOUTBOX_TABLE . " s, ".USERS_TABLE." u
WHERE s.shout_user_id=u.user_id ORDER BY s.shout_session_time DESC LIMIT $start, ".NUM_SHOUT;
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not get shoutbox information', '', __LINE__, __FILE__, $sql);
}
while ($shout_row = $db->sql_fetchrow($result))
{
$i++;
$row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
$user_id = $shout_row['shout_user_id'];
$username = ( $user_id == ANONYMOUS ) ? (( $shout_row['shout_username'] == '' ) ? $lang['Guest'] : $shout_row['shout_username'] ) : "<a href='".append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=".$shout_row['shout_user_id'])."' target='_top'>".$shout_row['username']."</a>" ;
$shout = (! $shout_row['shout_active']) ? $shout_row['shout_text'] : $lang['Shout_censor'];
if ( $board_config['allow_smilies'] && $shout_row['user_allowsmile'] && $shout != '' & $shout_row['enable_smilies'])
{
$shout = smilies_pass($shout);
}
$shout = bbencode_second_pass($shout,$shout_row['shout_bbcode_uid']);
$shout = preg_replace($orig_word, $replacement_word, $shout);
$shout = str_replace("\n", "\n<br />\n", $shout);
$shout = make_clickable($shout);

$template->assign_block_vars('shoutrow', array(
'ROW_COLOR' => '#' . $row_color,
'ROW_CLASS' => $row_class,
'SHOUT' => $shout,
'TIME' => create_date($lang['Shoutbox_date'], $shout_row['shout_session_time'], $board_config['board_timezone']),
'USERNAME' => $username
));
}
$template->assign_vars(array(
'U_SHOUTBOX_VIEW' => append_sid("shoutbox_view.$phpEx?$start"),
'T_NAME' => $theme['template_name'],
'T_URL' => "templates/".$theme['template_name'],
'T_HEAD_STYLESHEET' => $theme['head_stylesheet'],
'S_CONTENT_ENCODING' => $lang['ENCODING']
));
$template->pparse('body');

//
// Compress buffered output if required and send to browser
//
if ( $do_gzip_compress )
{
//
// Borrowed from php.net!
//
$gzip_contents = ob_get_contents();
ob_end_clean();

$gzip_size = strlen($gzip_contents);
$gzip_crc = crc32($gzip_contents);

$gzip_contents = gzcompress($gzip_contents, 9);
$gzip_contents = substr($gzip_contents, 0, strlen($gzip_contents) - 4);

echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
echo $gzip_contents;
echo pack('V', $gzip_crc);
echo pack('V', $gzip_size);
}
exit;

?>
3. Изменил шаблон shoutbox_view_body.tpl
<HEAD>

<script>window.setTimeout("location.reload()",60000);</script>
<noscript><META HTTP-EQUIV="Refresh" CONTENT="60"></noscript>

<meta http-equiv="Content-Type" content="text/html; charset={S_CONTENT_ENCODING}" />
<link rel="stylesheet" href="{T_URL}/{T_HEAD_STYLESHEET}" type="text/css">
<style>

</style>
</HEAD>
<body bgcolor="{T_BODY_BGCOLOR}" text="{T_BODY_TEXT}" link="{T_BODY_LINK}" vlink="{T_BODY_VLINK}">
<table width="100%" height="100%" cellpadding="0" cellspacing="1" border="0" class="forumline">
<!-- BEGIN shoutrow -->
<tr>
<td class="{shoutrow.ROW_CLASS}" width="100%" higth="100%">
<span class="gensmall">
{shoutrow.TIME}<br />
<b>{shoutrow.USERNAME}:</b><br />
{shoutrow.SHOUT}<br/></span>
</td>
</tr>
<!-- END shoutrow -->
</table>
</body>
Результат порадовал.

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4092
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 105 раз
Поблагодарили: 422 раза
Контактная информация:

Сообщение Siava » 17.01.2005 1:01

Егор Наклоняев,
то есть вы добавили компрессию? Впечатляет :)

Кстати, версия shoutbox обновилась
## MOD History:
##
## 2004-03-18 - Version 1.1.5
## - added a copy command, to copy all included files
##
## 2004-03-10 - Version 1.1.4
## - changed template "switch" in index_body.tpl
##
## 2004-03-10 - Version 1.1.3
## - removed the change done into page_header.php as no longer needed
##
## 2004-03-08 - Version 1.1.2
## - now also support language encoding
##
## 2004-03-08 - Version 1.1.1
## - templates isues fixed, various places
##
## 2004-02-28 - Version 1.1.0
## - added support bbcode on index, now no longer require my "Extra permission MOD"
##
## 2004-02-22 - Version 1.0.11
## - added support for line breaks to shoutbox
##
## 2004-01-07 - Version 1.0.10
## - flood error on the index, is now displayed more nicely
##
## 2004-01-07 - Version 1.0.9
## - corrected a bug regarding flood control
##
## 2003-12-11 - Version 1.0.8
## - phpBB template & EasyMOD compliance enhancement
## - Chinese Traditional Taiwan, Dutch, French, German
## German_sie, Italian & Swedish translations now provide
## with the MOD
##
## ????-??-?? - Version 1.0.7
## - typo reported by [D]J see...
## http://mods.db9.dk/viewtopic.php?t=3449
##
## ????-??-?? - Version 1.0.6
## - typo reported by nullOs see...
## http://mods.db9.dk/viewtopic.php?t=3449
##
## ????-??-?? - Version 1.0.5
## - typo reported by RapidDr3am see...
## http://mods.db9.dk/viewtopic.php?t=3328
##
## ????-??-?? - Version 1.0.4
## - corrected included template files shoutbox_max.tpl
## and shoutbox_max_guest-tpl
##
## ????-??-?? - Version 1.0.3
## - added changes to admin_db_utils.php
##
## ????-??-?? - Version 1.0.2
## - no change in the how-to, the included files updated
## to handle username more correctly
##
## ????-??-?? - Version 1.0.1
## - improved the included files
##
## ????-??-?? - Version 1.0.0
## - added allowtransparency="true" to iframes
##
## ????-??-?? - Version 0.9.14
## - added path to constants.php file, it was missing
##
## ????-??-?? - Version 0.9.13
## - Now support auto prune of shouts
##
## ????-??-?? - Version 0.9.12
## - DB change, added extra fields
##
## ????-??-?? - Version 0.9.11
## - a previous upgrade was some how gone, from the how-to,
## now pressent again !
##
## ????-??-?? - Version 0.9.10
## - now handle, username if users are deleted
##
## ????-??-?? - Version 0.9.9
## - corrected a typo in the how-to, making shout_id auto
## increment
##
## ????-??-?? - Version 0.9.8
## - improved permission control
##
## ????-??-?? - Version 0.9.7
## - moved shoutbox above who-is-online, and fixed some
## auth isues
##
## ????-??-?? - Version 0.9.6
## - improved version, now also support censor of shout's
##
## ????-??-?? - Version 0.9.5
## - require my "Extra permission mod", witch makes it
## posible to control who may shout
##
## ????-??-?? - Version 0.9.4
## - now maximized version have postes detail
На сайте можно скачать последнюю, на ней я и проверял ваши модификации.
Отмечу только, что авторефреш в последних версиях уже есть и выполнен он вот так:
В shoutbox_view_body.tpl

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

<HEAD><META http-equiv="refresh" content="120;url={U_SHOUTBOX_VIEW}?auto_refresh=1">


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

Я тоже малость модифицировал этот мод, убрав оттуда флуд-контроль :)

в shoutbox_max.php

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

	//
	// Flood control
	//
		$where_sql = ( $userdata['user_id'] == ANONYMOUS ) ? "shout_ip = '$user_ip'" : 'shout_user_id = ' . $userdata['user_id'];
		$sql = "SELECT MAX(shout_session_time) AS last_post_time
		FROM " . SHOUTBOX_TABLE . "
		WHERE $where_sql";
	if ( $result = $db->sql_query($sql) )
	{
		if ( $row = $db->sql_fetchrow($result) )
		{
			if ( $row['last_post_time'] > 0 && ( $current_time - $row['last_post_time'] ) < $board_config['flood_interval'] )
			{
				$error = true;
				$error_msg .= ( !empty($error_msg) ) ? '
' . $lang['Flood_Error'] : $lang['Flood_Error'];
			}
		}
	}
заменяем на:

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

	//
	// Flood control
	//
		$where_sql = ( $userdata['user_id'] == ANONYMOUS ) ? "shout_ip = '$user_ip'" : 'shout_user_id = ' . $userdata['user_id'];
		$sql = "SELECT MAX(shout_session_time) AS last_post_time
		FROM " . SHOUTBOX_TABLE . "
		WHERE $where_sql";
//	if ( $result = $db->sql_query($sql) )
//	{
//		if ( $row = $db->sql_fetchrow($result) )
//		{
//			if ( $row['last_post_time'] > 0 && ( $current_time - $row['last_post_time'] ) < $board_config['flood_interval'] )
//			{
//				$error = true;
//				$error_msg .= ( !empty($error_msg) ) ? '
' . $lang['Flood_Error'] : $lang['Flood_Error'];
//			}
//		}
//	}
Аналогично и в shoutbox.php
код:

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

	//
	// Flood control
	//
	$where_sql = ( $userdata['user_id'] == ANONYMOUS ) ? "shout_ip = '$user_ip'" : 'shout_user_id = ' . $userdata['user_id'];
	$sql = "SELECT MAX(shout_session_time) AS last_post_time
		FROM " . SHOUTBOX_TABLE . "
		WHERE $where_sql";
	if ( $result = $db->sql_query($sql) )
	{
		if ( $row = $db->sql_fetchrow($result) )
		{
			if ( $row['last_post_time'] > 0 && ( $current_time - $row['last_post_time'] ) < $board_config['flood_interval'] )
			{
				$error = true;
				$error_msg .= ( !empty($error_msg) ) ? '
' . $lang['Flood_Error'] : $lang['Flood_Error'];
			}
		}
	}
Заменяем на:

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

	//
	// Flood control
	//
	$where_sql = ( $userdata['user_id'] == ANONYMOUS ) ? "shout_ip = '$user_ip'" : 'shout_user_id = ' . $userdata['user_id'];
	$sql = "SELECT MAX(shout_session_time) AS last_post_time
		FROM " . SHOUTBOX_TABLE . "
		WHERE $where_sql";
//	if ( $result = $db->sql_query($sql) )
//	{
//		if ( $row = $db->sql_fetchrow($result) )
//		{
//			if ( $row['last_post_time'] > 0 && ( $current_time - $row['last_post_time'] ) < $board_config['flood_interval'] )
//			{
//				$error = true;
//				$error_msg .= ( !empty($error_msg) ) ? '
' . $lang['Flood_Error'] : $lang['Flood_Error'];
//			}
//		}
//	}


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

Хотя наверно стоило тут всё закомментировать? :roll: :oops:
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

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

есть вы добавили компрессию? Впечатляет
Компрессия вторична. Я добавил HTTP заголовки для кэширования у клиента и их обработку. Это даёт ощутимый выигрыш в скорости и существенное падение траффика (если, конечно, не забыть поле shout_session_time проиндексировать):
Вся мораль тут:

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

$sql="SELECT MAX(shout_session_time) as tm FROM " . SHOUTBOX_TABLE; 
if ( !($result = $db->sql_query($sql)) ) 
{ 
message_die(GENERAL_ERROR, 'Could not get shoutbox information', '', __LINE__, __FILE__, $sql); 
} 
$row=$db->sql_fetchrow($result); 
$shout_time=$row['tm']; 
$MyETag='"SH'.gmdate("YmdHis", $shout_time).$verinfo.'"'; 
$MyGMTtime=gmdate("D, d M Y H:i:s", $shout_time)." GMT"; 
header("Last-Modified: ".$MyGMTtime); 
header("Etag: ".$MyETag); 
header("Expires: ".gmdate("D, d M Y H:i:s", time())." GMT"); 
if(isset($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'])) { 
if ($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'] == $MyETag) { 
header("HTTP/1.1 304 Not Modified"); 
exit; 
} 
} 
else { 
if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'])) { 
if ($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'] == $MyGMTtime) { 
header("HTTP/1.1 304 Not Modified"); 
exit; 
} 
}} 
Кстати, версия shoutbox обновилась
У меня, кажись, и есть последняя. Во всяком случае я его ставил себе где-то в ноябре 2004 года и качал с сайта автора.

P.S. Забыл выделить еще изменение от оригинала:

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

$shout = make_clickable($shout); 
Чтобы ссылки работали красиво

Добавлено спустя 6 минут 25 секунд:
Отмечу только, что авторефреш в последних версиях уже есть и выполнен он вот так:
В shoutbox_view_body.tpl
Код:
<HEAD><META http-equiv="refresh" content="120;url={U_SHOUTBOX_VIEW}?auto_refresh=1">
Во-во! Именно его я и заменил!

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4092
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 105 раз
Поблагодарили: 422 раза
Контактная информация:

Сообщение Siava » 17.01.2005 17:13

Егор Наклоняев
1. В таблице phpbb_shout cоздал индекс для shout_session_time
Кстати, ведь эта таблица там уже есть или я неправильно понял? :roll: :oops:
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

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

ведь эта таблица там уже есть
Есть. Именно в неё весь трёп и записывается....
Но, что характерно, таблица лишена хоть каких-нибудь разумных индексов.

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4092
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 105 раз
Поблагодарили: 422 раза
Контактная информация:

Сообщение Siava » 17.01.2005 19:33

Егор Наклоняев
А в shout_session_time какие-нибудь изменения вносить надо?
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

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

А в shout_session_time какие-нибудь изменения вносить надо?
Гм. Вроде русским по белому пишу: добавить индекс. Вроде про модификацию полей таблицы я ни слова не говорил, только про индексы.

Таблица изменяется так

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

ALTER TABLE phpbb_shout ADD INDEX (shout_session_time)
Для ускорения работы проверки флуд-контроля для зарегистрированных пользователей:
ALTER TABLE phpbb_shout ADD INDEX (shout_user_id,shout_session_time)

Если анонимы могут писать, то еще:
ALTER TABLE phpbb_shout ADD INDEX (shout_ip ,shout_session_time)

В результате этого наступает ЩАСТЬЕ™

newest

Сообщение newest » 21.02.2005 17:59

Егор Наклоняев
спасибо..

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4092
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 105 раз
Поблагодарили: 422 раза
Контактная информация:

Сообщение Siava » 21.02.2005 23:47

Егор Наклоняев
Единственный глюк я заметил, когда на форуме несколько стилей. При смене одного стиля на другой вид окна Shoutbox остаётся в старом стиле до тех пор, пока не добавите туда сообщение..
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Erlang
phpBB 2.0.15
Сообщения: 1033
Зарегистрирован: 13.07.2004 21:30
Откуда: Москва
Благодарил (а): 297 раз
Поблагодарили: 6 раз
Контактная информация:

Сообщение Erlang » 07.03.2005 12:41

А как можно осуществить переход с version 0.9.3 на Version 1.1.5?
Просто замена файлов?
С уважением,
Сергей

Аватара пользователя
Verades
phpBB 1.4.3
Сообщения: 77
Зарегистрирован: 04.04.2005 17:28
Откуда: п. Врангель
Контактная информация:

Сообщение Verades » 04.04.2005 17:33

Что-то я нахимичила при установке, в результате форум выдает
Parse error: parse error, unexpected T_DOUBLE_ARROW, expecting ')' in /home/c/citadelppil.hut1.ru/WWW/forum/index.php on line 276
Кто скажет, в чем мой косяк? Уж очень хочется этот мод на форум поставить! =(
Куплю сторожевого хомячка с трёхлитровой будкой

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4092
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 105 раз
Поблагодарили: 422 раза
Контактная информация:

Сообщение Siava » 04.04.2005 21:57

Verades
expecting ')' in index.php on line 276

Скобку пропустил или лишняя, посмотри внимательней. :roll:
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

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

И снова чистим shoutbox
Если установлена автоочиска, то программа не находит ничего лучшего, как каждое сообщение проверять, а не пора ли удалить старые записи.
Как известно, запрос DELETE достаточно медленный, поэтому будем это лечить.

ВЫПОЛНИТЬ SQL

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

INSERT INTO `phpbb_config` ( `config_name` , `config_value` )
VALUES (
'prune_shouts_time', '0'
);
НАЙТИ В shoutbox.php

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

		if ($board_config['prune_shouts'])
		{
			$sql = "DELETE FROM " . SHOUTBOX_TABLE. " WHERE shout_session_time<=".(time()-86400*$board_config['prune_shouts']);
			if (!$result = $db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Error autoprune shouts.', '', __LINE__, __FILE__, $sql);
			}
		}
ЗАМЕНИТЬ НА

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

		if ($board_config['prune_shouts'] && (intval($board_config['prune_shouts_time'])<time()))
		{
			$sql = "DELETE FROM " . SHOUTBOX_TABLE. " WHERE shout_session_time<=".(time()-86400*$board_config['prune_shouts']);
			if (!$result = $db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Error autoprune shouts.', '', __LINE__, __FILE__, $sql);
			}
            $sql = "UPDATE " . CONFIG_TABLE. " SET config_value ='".(time()+43200)."' WHERE config_name = 'prune_shouts_time'";
			if (!$result = $db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Error update config.', '', __LINE__, __FILE__, $sql);
			}
		}
НАЙТИ В shoutbox_max.php

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

if ($board_config['prune_shouts'])
		{
			$sql = "DELETE FROM " . SHOUTBOX_TABLE. " WHERE shout_session_time<=".(time()-86400*$board_config['prune_shouts']);
			if (!$result = $db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Error autoprune shouts.', '', __LINE__, __FILE__, $sql);
			}
		}
ЗАМЕНИТЬ НА

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

if ($board_config['prune_shouts'] && (intval($board_config['prune_shouts_time'])<time()))
		{
			$sql = "DELETE FROM " . SHOUTBOX_TABLE. " WHERE shout_session_time<=".(time()-86400*$board_config['prune_shouts']);
			if (!$result = $db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Error autoprune shouts.', '', __LINE__, __FILE__, $sql);
			}
            $sql = "UPDATE " . CONFIG_TABLE. " SET config_value ='".(time()+43200)."' WHERE config_name = 'prune_shouts_time'";
			if (!$result = $db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Error update config.', '', __LINE__, __FILE__, $sql);
			}
		}
В результате проверка будет включаться только раз в 12 часов.

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4092
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 105 раз
Поблагодарили: 422 раза
Контактная информация:

Сообщение Siava » 09.04.2005 16:51

Егор Наклоняев
Всё работает, строго не сужу, но на глаз чуууточку быстрее загружается фрейм :D

Вопрос есть, тоже на эту тему.
Если на форуме зайти в shoutbox_max.php и оттуда писать сообщения, то при нажатии на "обновить" в браузере сообщения дублируются (некоторые люди не замечают кнопочки обновить в самом shoutbox).
Хоть это к оптимизации не относится, но если будет возможность решить эту задачку, было бы неплохо :roll:
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Аватара пользователя
Verades
phpBB 1.4.3
Сообщения: 77
Зарегистрирован: 04.04.2005 17:28
Откуда: п. Врангель
Контактная информация:

Сообщение Verades » 14.04.2005 11:18

Форум выводит ошибку:

Parse error: parse error, unexpected T_DOUBLE_ARROW, expecting ')' in /home/m/mstyn.h14.ru/WWW/forums/index.php on line 277

Вот эта линия:

'U_SHOUTBOX' => append_sid("shoutbox.$phpEx"),

В чем косяк?
Куплю сторожевого хомячка с трёхлитровой будкой

Закрыто

Вернуться в «Поддержка модов для phpBB 2.0.x»