Насколько ресурсоемкий движок ppkBB3cker ?

Ваше мнение

 • Просмотры: 1374
at
atom_trek
Благодарил (а): 2 раза
Сообщения: 35
Зарегистрирован: 26 окт 2010, 17:36
Сообщение

Насколько ресурсоемкий движок ppkBB3cker ?

08 ноя 2010, 16:03

Нет пока не провал ,попробую вариант для яндекса , может подойдет , после отпишусь
at
atom_trek
Благодарил (а): 2 раза
Сообщения: 35
Зарегистрирован: 26 окт 2010, 17:36
Сообщение

Насколько ресурсоемкий движок ppkBB3cker ?

10 ноя 2010, 19:13

Почту настроил через smtp для яндекс-почты . Почтовые уведомление работают хорошо :)
Но вот чего-то не отражаются сообщения в чате , когда нажимает на кнопку отправить . Стиль движка используется prosilver .
В чем может быть причина ? :?
at
atom_trek
Благодарил (а): 2 раза
Сообщения: 35
Зарегистрирован: 26 окт 2010, 17:36
Сообщение

Насколько ресурсоемкий движок ppkBB3cker ?

13 ноя 2010, 19:38

Отчего может быть такая работа чата ?

http://www.youtube.com/watch?v=Z2cwLi1F-UM
at
atom_trek
Благодарил (а): 2 раза
Сообщения: 35
Зарегистрирован: 26 окт 2010, 17:36
Сообщение

Насколько ресурсоемкий движок ppkBB3cker ?

24 ноя 2010, 17:06

Проблему с не появлением текста решена благодаря РРК :)
Путем добавления части кода в message_user.php .
Добавленный код выделен знаками равенства === :

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

<?php

/**
*
* @package ppkBB3cker
* @version $Id: message_user.php 1.000 2008-10-04 11:10:00 PPK $
* @copyright (c) 2008 PPK
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

error_reporting(E_ALL);

$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$startsqlcount=0;
function_exists('date_default_timezone_set') ? date_default_timezone_set('Europe/Moscow') : '';

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './../';
$phpEx = substr(strrchr(__FILE__, '.'), 1);

require($phpbb_root_path.'config.'.$phpEx);

if($dbms!='mysql')
{
	err('Only mysql supported');
}

$c=@mysql_connect($dbhost, $dbuser, $dbpasswd);
if(!$c)
{
	err('Error connecting database: '.mysql_error());
}

$s=@mysql_select_db($dbname, $c);
if(!$s)
{
	err('Error selecting database: '.mysql_error($c));
}

define('CONFIG_TABLE', $table_prefix . 'config');
define('SMILIES_TABLE', $table_prefix . 'smilies');
define('PPKCHAT_USERS_TABLE', $table_prefix . 'ppkchat_users');
define('PPKCHAT_MESSAGES_TABLE', $table_prefix . 'ppkchat_messages');

my_sql_query("SET NAMES 'utf8'");

$config=array();
$sql="SELECT config_name, config_value FROM ".CONFIG_TABLE." WHERE config_name IN ('smilies_path', 'script_path') OR config_name LIKE 'ppkbb\_chat%'";
$result=my_sql_query($sql);
while($row=mysql_fetch_row($result))
{
	$config[$row[0]]=$row[1];
}
mysql_free_result($result);

$dt = time();
$gmq_gpc = get_magic_quotes_gpc() ? 1 : 0;

$forum_id=my_int_val(@$_GET['f']);
$chat_message=$gmq_gpc ? @$_POST['message'] : mysql_real_escape_string(@$_POST['message'], $c);
$del_message=my_int_val(@$_POST['del_mess']);
$chat_key=$gmq_gpc ? @$_GET['chatkey'] : mysql_real_escape_string(@$_GET['chatkey'], $c);
$lang='ru';

$sql='SELECT * FROM ' .PPKCHAT_USERS_TABLE. "";
$result=my_sql_query($sql);
$users=$chat_user=array();
while($row=mysql_fetch_array($result))
{
	if($row['room']==$forum_id)
	{
		if($row['chatkey']==$chat_key)
		{
			$chat_user=$row;
		}
		$users[]=$row;
	}
}
mysql_free_result($result);

$message_table=$user_table='';
$timeout=0;
intval($config['ppkbb_chat_murefresh']) > 9 ? '' : $config['ppkbb_chat_murefresh']=10;

if(@$chat_user)
{
	list($lang, $rights)=explode('//', $chat_user['rights']);
	!$lang ? $lang='ru' : '';
	require_once("{$phpbb_root_path}language/$lang/mods/chat.$phpEx");
	//0-$is_adm 1-$is_mod 2-$is_canaddchatm 3-$is_canviewchatu
	//4-$is_canviewchatm 5-$is_candelchatm 6-$is_canskipchatktime
	//7-$is_canhiddeninchat 8-$is_canviewhiddinchat 9-$is_cansendchatpm
	//10-$is_canskipdisbutton 11-$is_canusesmilies 12-$is_canusebbcodes

	$rights=explode(' ', $rights);
	$user_color=$user_rights=array();

	$skip_lacheck=0;

	if($del_message)
	{
		if($rights[4] && $rights[5])//is_canviewchatm is_candelchatm
		{
			$sql='DELETE FROM ' .PPKCHAT_MESSAGES_TABLE. " WHERE id='$del_message' AND user_id={$chat_user['user_id']} LIMIT 1";
			$result=my_sql_query($sql);
		}
	}
	else
	{
		$lastpost=0;
		if($chat_message)
		{
			if($rights[4] && $rights[2])//is_canviewchatm is_canaddchatm
			{
				if($config['ppkbb_chat_autokill_onpost'] && !$rights[10] && ($dt - $chat_user['lastpost']) < $config['ppkbb_chat_waittime'] - 1)
				{
					userkick(0);
				}
				else
				{
					$chat_message = str_replace('---', '- - -', $chat_message);
					$chat_user['username'] = str_replace('---', '- - -', $chat_user['username']);
					intval($config['ppkbb_chat_messlength']) ? '' : $config['ppkbb_chat_messlength']=255;
					$mbstring=extension_loaded('mbstring') ? 1 : 0;
					$chat_message_len=$mbstring ? mbstring_utf8_strlen($chat_message) : utf8_strlen($chat_message);

					if($chat_message_len > $config['ppkbb_chat_messlength'])
					{
						$chat_message=$mbstring ? mbstring_utf8_substr($chat_message, 0, $config['ppkbb_chat_messlength']) : utf8_substr($chat_message, 0, $config['ppkbb_chat_messlength']);
					}

					$sql='INSERT INTO ' .PPKCHAT_MESSAGES_TABLE. " (message, user_id, to_user, date, rights, room, username, user_color) VALUES ('$chat_message', '{$chat_user['user_id']}', '0', '$dt', '{$chat_user['rights']}', '$forum_id', '{$chat_user['username']}', '{$chat_user['user_color']}')";
					$result=my_sql_query($sql);

					$lastpost=$dt;
					$skip_lacheck=1;
				}
			}
			else
			{
				userkick(1);
			}
		}

		$sql='UPDATE ' .PPKCHAT_USERS_TABLE. ' SET lastaccess='.($lastpost ? 'lastaccess-'.$config['ppkbb_chat_murefresh'] : "'$dt'").($lastpost ? ", lastpost='$lastpost'" : '')." WHERE chatkey='{$chat_key}' AND room='{$forum_id}'";
		$result=my_sql_query($sql);
		if($rights[3])//is_canviewchatu
		{
			/*if($config['ppkbb_chat_autokill_onrefresh'] && !$skip_lacheck && ($dt - $chat_user['lastaccess']) < $config['ppkbb_chat_murefresh'] - 1)
			{
				userkick(2);
			}
			else
			{*/
				$config['script_path']=$config['script_path']!='/' ? $config['script_path'].'/' : '/';
				foreach($users as $v)
				{
					$lcr=explode('//', $v['rights']);
					$user_rights[$v['user_id']]=explode(' ', $lcr[1]);

					$user_color[$v['user_id']]=$v['user_color'];

					if($user_rights[$v['user_id']][7] && !$rights[8])//is_canhiddeninchat is_canviewhiddinchat
					{

					}
					else
					{
						$v['username']=stripslashes($v['username']);
						$v['username'] = str_replace('---', '&minus;&minus;&minus;', $v['username']);
						$user_table.= '
						<div><a target="new" href="'.$config['script_path'].'memberlist.'.$phpEx.'?mode=viewprofile&u='.$v['user_id'].'">&bull;</a>&nbsp;<a style="font-weight:bold;'.($v['user_color'] ? 'color:#'.$v['user_color'] : '').';" href="javascriptvoid(0);" onClick="javascriptinserttext(\''.$v['username'].': \')">'.($user_rights[$v['user_id']][7] && $rights[8] ? '<i>'.$v['username'].'</i>' : $v['username']).'</a></div>';
					}
				}
			//}
		}
		else
		{
			$user_table= '<div><span class="textuser">'.$lang['CHAT_CANT_VIEWCHATU'].'</span></div>';
		}
		if($rights[4])//is_canviewchatm
		{
			/*if($config['ppkbb_chat_autokill_onrefresh'] && !$skip_lacheck && ($dt - $chat_user['lastaccess']) < $config['ppkbb_chat_murefresh'] - 1)
			{
				userkick(3);
			}
			else
			{*/
				$smiles=get_chat_smilies();
				intval($config['ppkbb_chat_messdisplay']) ? '' : $config['ppkbb_chat_messdisplay']=25;
				$sql='SELECT * FROM ' .PPKCHAT_MESSAGES_TABLE. " WHERE room='$forum_id' ORDER BY id DESC LIMIT {$config['ppkbb_chat_messdisplay']}";
				$result=my_sql_query($sql);

				$last_mess_id=0;
				while($row=mysql_fetch_array($result))
				{
					if(@!$user_rights[$row['user_id']])
					{
						$lcr=explode('//', $row['rights']);
						@$user_rights[$row['user_id']]=explode(' ', $lcr[1]);
					}

					$row['message']=htmlspecialchars(stripslashes($row['message']));
					//$row['message']=wordwrap($row['message'], 32, '<wbr>', 1);
					$row['message'] = str_replace('---', '&minus;&minus;&minus;', $row['message']);

					if($config['ppkbb_chat_timecorrect'])
					{
						if(strpos($config['ppkbb_chat_timecorrect'], '-')===true)
						{
							$row['date']=$row['date'] - intval($config['ppkbb_chat_timecorrect']);
						}
						else
						{
							$row['date']=$row['date'] + intval($config['ppkbb_chat_timecorrect']);
						}
					}
					if(@$user_rights[$row['user_id']][11] && $rights[11])
					{
						$row['message']=chat_smilies($row['message'], $smiles['match'], $smiles['replace'], $config['ppkbb_chat_maxsmiles']);
					}

					$message_table.= '
					<div style="width:100%;" id="p'.$row['id'].'">'.date('H:i:s', $row['date']).' <b style="'.(@$user_color[$row['user_id']] ? 'color:#'.$user_color[$row['user_id']] : '').';">'.$row['username'].'</b> '.(@$rights[5] && $row['user_id']==$chat_user['user_id'] ? '<a href="javascriptvoid('.$row['id'].')" title="'.$lang['CHAT_DELMESS'].'" onclick="delete_post(\''.$row['id'].'\')">[x]</a> ' : '').$row['message'].'</div>';

					$last_mess_id=$row['id'];
				}
				mysql_free_result($result);

				$config['ppkbb_chat_marchive'] ? $config['ppkbb_chat_messdisplay']+=$config['ppkbb_chat_marchive'] : '';
				if( ($dt - $config['ppkbb_chat_last_cleanup']) > $config['ppkbb_chat_cleanup_interval'] && ($last_mess_id - $config['ppkbb_chat_messdisplay']) > 0)
				{
					$sql='DELETE FROM ' .PPKCHAT_MESSAGES_TABLE. " WHERE room='$forum_id' AND id < '$last_mess_id'";
					$result=my_sql_query($sql);

					$sql='UPDATE ' .CONFIG_TABLE. " SET config_value='$dt' WHERE config_name='ppkbb_chat_last_cleanup'";
					$result=my_sql_query($sql);
				}
			//}
		}
		else
		{
			$message_table= '<div><span class="textmess">'.$lang['CHAT_CANT_VIEWCHATM'].'</span></div>';
		}
	}
	if(!$rights[6] && $dt - @$chat_user['lastpost'] > $config['ppkbb_chat_killtime'])
	{
		userkick(4);
	}
}
else
{
	require_once("{$phpbb_root_path}language/$lang/mods/chat.$phpEx");
	$config['ppkbb_chat_murefresh']=3600;
	$user_table= '';

	$message_table= '<table width="100%" cellpadding="0" cellspacing="1" border="0">';
	$message_table.= '
		<tr valign="top">
			<td>
				<span class="textmess">'.$lang['CHAT_LOGIN'].'</span>
			</td>
		</tr>';
	$message_table.= '</table>';
}

echo "$message_table---1---$user_table---3---".($config['ppkbb_chat_murefresh']*1000)."---$timeout";
if($c)
{
	mysql_close($c);
}

$mtime = explode(' ', microtime());
$totaltime = $mtime[0] + $mtime[1] - $starttime;

exit();

//############################################################

function get_chat_smilies()
{
	global $config;
	static $match;
	static $replace;

	// See if the static arrays have already been filled on an earlier invocation
	if (!is_array($match))
	{
		$match = $replace = array();
		$smiles=array();

		$sql = 'SELECT *
			FROM ' . SMILIES_TABLE . '
			ORDER BY LENGTH(code) DESC';

		$result = my_sql_query($sql);

		while($row=mysql_fetch_array($result))
		{
			if (empty($row['code']))
			{
				continue;
			}

			// (assertion)
			$smiles['match'][] = '(?<=^|[\n .])' . preg_quote($row['code'], '#') . '(?![^<>]*>)';
			$smiles['replace'][] = '<img src="./'.$config['smilies_path'].'/' . $row['smiley_url'] . '" alt="' . $row['code'] . '" title="' . $row['emotion'] . '" />';
		}
		mysql_free_result($result);
	}

	return $smiles;
}

function chat_smilies($text, $match, $replace, $max_smilies = 0)
{
	if (sizeof($match))
	{
		if ($max_smilies)
		{
			$num_matches = preg_match_all('#' . implode('|', $match) . '#', $text, $matches);
			unset($matches);

			if ($num_matches !== false && $num_matches > $max_smilies)
			{
				return $text;
			}
		}

		// Make sure the delimiter # is added in front and at the end of every element within $match
		$text = trim(preg_replace(explode(chr(0), '#' . implode('#' . chr(0) . '#', $match) . '#'), $replace, $text));
	}

	return $text;
}

function my_sql_query($query)
{
	global $startsqlcount, $c;

	$startsqlcount+=1;

	$result=@mysql_query($query, $c);

	if(!$result)
	{
		err('Unknown Error');
	}

	return $result;
}

//From includes/utf/utf_tools.php
function mbstring_utf8_substr($str, $offset, $length = null)
{
	if (is_null($length))
	{
		return mb_substr($str, $offset);
	}
	else
	{
		return mb_substr($str, $offset, $length);
	}
}

//From includes/utf/utf_tools.php
function mbstring_utf8_strlen($text)
{
	return mb_strlen($text, 'utf-8');
}

//From includes/utf/utf_tools.php
function utf8_substr($str, $offset, $length = NULL)
{
	// generates E_NOTICE
	// for PHP4 objects, but not PHP5 objects
	$str = (string) $str;
	$offset = (int) $offset;
	if (!is_null($length))
	{
		$length = (int) $length;
	}

	// handle trivial cases
	if ($length === 0 || ($offset < 0 && $length < 0 && $length < $offset))
	{
		return '';
	}

	// normalise negative offsets (we could use a tail
	// anchored pattern, but they are horribly slow!)
	if ($offset < 0)
	{
		// see notes
		$strlen = utf8_strlen($str);
		$offset = $strlen + $offset;
		if ($offset < 0)
		{
			$offset = 0;
		}
	}

	$op = '';
	$lp = '';

	// establish a pattern for offset, a
	// non-captured group equal in length to offset
	if ($offset > 0)
	{
		$ox = (int) ($offset / 65535);
		$oy = $offset % 65535;

		if ($ox)
		{
			$op = '(?:.{65535}){' . $ox . '}';
		}

		$op = '^(?:' . $op . '.{' . $oy . '})';
	}
	else
	{
		// offset == 0; just anchor the pattern
		$op = '^';
	}

	// establish a pattern for length
	if (is_null($length))
	{
		// the rest of the string
		$lp = '(.*)$';
	}
	else
	{
		if (!isset($strlen))
		{
			// see notes
			$strlen = utf8_strlen($str);
		}

		// another trivial case
		if ($offset > $strlen)
		{
			return '';
		}

		if ($length > 0)
		{
			// reduce any length that would
			// go passed the end of the string
			$length = min($strlen - $offset, $length);

			$lx = (int) ($length / 65535);
			$ly = $length % 65535;

			// negative length requires a captured group
			// of length characters
			if ($lx)
			{
				$lp = '(?:.{65535}){' . $lx . '}';
			}
			$lp = '(' . $lp . '.{'. $ly . '})';
		}
		else if ($length < 0)
		{
			if ($length < ($offset - $strlen))
			{
				return '';
			}

			$lx = (int)((-$length) / 65535);
			$ly = (-$length) % 65535;

			// negative length requires ... capture everything
			// except a group of  -length characters
			// anchored at the tail-end of the string
			if ($lx)
			{
				$lp = '(?:.{65535}){' . $lx . '}';
			}
			$lp = '(.*)(?:' . $lp . '.{' . $ly . '})$';
		}
	}

	if (!preg_match('#' . $op . $lp . '#us', $str, $match))
	{
		return '';
	}

	return $match[1];
}

//From includes/utf/utf_tools.php
function utf8_strlen($text)
{
	// Since utf8_decode is replacing multibyte characters to ? strlen works fine
	return strlen(utf8_decode($text));
}
================================================================================
/**
* Implementation of PHP's native utf8_decode for people without XML support
*
* @param string $str UTF-8 encoded data
* @return string ISO-8859-1 encoded data
*/
function utf8_decode($str)
{
	$pos = 0;
	$len = strlen($str);
	$ret = '';

	while ($pos < $len)
	{
		$ord = ord($str[$pos]) & 0xF0;
		if ($ord === 0xC0 || $ord === 0xD0)
		{
			$charval = ((ord($str[$pos]) & 0x1F) << 6) | (ord($str[$pos + 1]) & 0x3F);
			$pos += 2;
			$ret .= (($charval < 256) ? chr($charval) : '?');
		}
		else if ($ord === 0xE0)
		{
			$ret .= '?';
			$pos += 3;
		}
		else if ($ord === 0xF0)
		{
			$ret .= '?';
			$pos += 4;
		}
		else
		{
			$ret .= $str[$pos];
			++$pos;
		}
	}
	return $ret;
}

function err($str)
{
	global $c;

	echo $str;
	if($c)
	{
		mysql_close($c);
	}
	exit();
}
==================================================================================
function userkick($n=0)
{
	global $lang;

	$message_table='['.intval($n).'] '.$lang['CHAT_LA_CHECK'];
	$user_table='';

	err("$message_table---1---$user_table---3---3600000---1");
}

function my_int_val($v=0)
{
	if(!$v || $v < 0)
	{
		return 0;
	}

	return @number_format($v+0, 0, '', '');
}
?>
P.S
Данное решение применительно для тех кто использует PHP + FastCGI и Inginx .

Но появилась другая загвоздка :(
У какого-нибудь были проблемы с очисткой сообщении в чате ? У меня почему-то не удаляются сообщения из чата в указанное время .
В чем может быть причина ? Я думаю что это может быть связано с несовпадения с записями о таблиц в этом файле и записями таблиц в базе .
Пробовал изменять в message_user.php :

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

define('CONFIG_TABLE', $table_prefix . 'config');
define('SMILIES_TABLE', $table_prefix . 'smilies');
define('PPKCHAT_USERS_TABLE', $table_prefix . 'ppkchat_users');
define('PPKCHAT_MESSAGES_TABLE', $table_prefix . 'ppkchat_messages');
в соответствии с префиксом и записями в таблицах на

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

define('CONFIG_TABLE', $table_prefix . 'users_config');
define('SMILIES_TABLE', $table_prefix . 'users_smilies');
define('PPKCHAT_USERS_TABLE', $table_prefix . 'users_ppkchat_users');
define('PPKCHAT_MESSAGES_TABLE', $table_prefix . 'users_ppkchat_messages');
Получилось :
http://www.youtube.com/watch?v=3V8tm0gvajY

Для решения данной проблемы , уважаемый РРК , предложил это :

В /chat/message_user.php заменить

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

        $config['ppkbb_chat_marchive'] ? $config['ppkbb_chat_messdisplay']+=$config['ppkbb_chat_marchive'] : '';
на

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

        //$config['ppkbb_chat_marchive'] ? $config['ppkbb_chat_messdisplay']+=$config['ppkbb_chat_marchive'] : '';
Но к сожалению, это не помогло. Проблема осталась .

Буду очень признателен если вы мне поможете разобраться с этой проблемой.
at
atom_trek
Благодарил (а): 2 раза
Сообщения: 35
Зарегистрирован: 26 окт 2010, 17:36
Сообщение

Насколько ресурсоемкий движок ppkBB3cker ?

24 ноя 2010, 17:24

atom_trek писал(а):P.S
Данное решение применительно для тех кто использует PHP + FastCGI и Inginx .
Опечатался я в слове Inginx , правильно Nginx :)
at
atom_trek
Благодарил (а): 2 раза
Сообщения: 35
Зарегистрирован: 26 окт 2010, 17:36
Сообщение

Насколько ресурсоемкий движок ppkBB3cker ?

24 ноя 2010, 19:19

atom_trek писал(а): У меня почему-то не удаляются сообщения из чата в указанное время .
Еще одна опечатка в указанное время , имеется ввиду не время, а интервал :oops:

Вернуться в «Вопросы, ответы и примеры решений»