Memcached чат

Lange

Пользователь
#1
Всем доброго времени суток. Помогите пожалуйста с адаптацией memcache чата от Exile'a.
В общем вроде основное сменил всё, выскакивает ошибка в окне чата:
Warning: Invalid argument supplied for foreach() in C:\nimp\htdocs\tracker.org\shoutbox_view.php on line 20 
Линия: foreach ($shout_cached as $shout_row)
После отправления сообщения:
Fatal error: Call to undefined function make_clickable() in C:\nimp\htdocs\tracker.org\shoutbox.php on line 39
Линия: $message = make_clickable($message);
-------------------------------------------
shoutbox_view.php:
PHP:
<?php

define('IN_PHPBB', true);
define('BB_SCRIPT', 'shoutbox_view');
define('BB_ROOT', './');
include(BB_ROOT . 'common.php');
include(BB_ROOT . 'includes/bbcode.php');

$memcache = new Memcache;
$memcache->connect('localhost', 11211);

$user->session_start();

if(!$userdata['user_active']) die();

$shout_cached = $memcache->get('shout');
if($shout_cached) echo"<!-- from_cache -->\r\n";

$i = 0;
foreach ($shout_cached as $shout_row)
{
$i++;
$row_class = !($i % 2) ? 'row1' : 'row2';
$shout = str_replace("\n", "\n<br />\n", smilies_pass($shout_row['shout_text']));

$template->assign_block_vars('shoutrow', array(
'ROW_CLASS' => $row_class,
'SHOUT' => $shout,
'TIME' => create_date('H:i:s', $shout_row['shout_time'], $userdata['user_timezone']),
'USERNAME' => '<b>'.$shout_row['username'].'</b>',
'USERNAME_JS' => addslashes($shout_row['username']),
'SHOUT_ID' => 'id="shout_'.$shout_row['shout_id'].'"',
'SHOUT_DEL_IMG' => ($userdata['user_level'] == 1 || $userdata['user_level'] == 2) ? '<img src="images/shout_del.png" title="Удалить" alt="Удалить" class="clickable" onclick="ajax.shout_del('.$shout_row['shout_id'].'); return false;" align="absmiddle">&nbsp;' : '',
'SHOUT_PROFILE_LINK' => '<a href="profile.php?mode=viewprofile&u='.$shout_row['shout_user_id'].'" target="_blank"><img title="Ссылка на профиль" alt="Ссылка на профиль" align="absmiddle" src="images/icon_external.png" /></a>',
));
}

$template->set_filenames(array('body' => 'shoutbox_view_body.tpl'));
$template->pparse('body');
?>
shoutbox.php:
PHP:
<?php

define('IN_PHPBB', true);
define('BB_SCRIPT', 'shoutbox');
define('BB_ROOT', './');
include(BB_ROOT . 'common.php');
include(BB_ROOT . 'includes/bbcode.php');
include(BB_ROOT . 'includes/functions_post.php');

$memcache = new Memcache;
$memcache->connect('localhost', 11211);

$user->session_start();
generate_smilies('inline');

if(!$userdata['user_active']) die();

$refresh = (isset($_POST['auto_refresh']) || isset($_POST['refresh'])) ? 1 : 0;
$submit = (isset($_POST['shout']) && isset($_POST['message'])) ? 1 : 0;

if ($refresh)
{
$message = ( !empty($_POST['message']) ) ? htmlspecialchars(trim(stripslashes($_POST['message']))) : '';
if (!empty($message))
{
$template->assign_var('MESSAGE',$message);
}
} else
if ($submit || isset($_POST['message']))
{
$message = (isset($_POST['message'])) ? trim($_POST['message']) : '';
if (!empty($message))
{
$html_entities_match = array('#&(?!(\#[0-9]+;))#', '#<#', '#>#', '#"#');
$html_entities_replace = array('&amp;', '&lt;', '&gt;', '&quot;');
$message = str_replace("\r", '', trim($message));
$message = preg_replace("#\n{3,}#", "\n\n", $message);
$message = preg_replace($html_entities_match, $html_entities_replace, $message);
$message = make_clickable($message);
$message = smilies_pass($message);
$message = nl2br($message);
$sql = "INSERT INTO ".SHOUTBOX_TABLE." (shout_id, shout_text, shout_time, shout_user_id, shout_username) VALUES (null, '".DB()->escape($message)."', '".time()."', '".$userdata['user_id']."', '".DB()->escape($userdata['username'])."')";
if ( !(DB()->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not post shoutbox information', '', __LINE__, __FILE__, $sql);
}
$sql_memcache = "SELECT s.*, u.username FROM " . SHOUTBOX_TABLE . " s, ".USERS_TABLE." u WHERE s.shout_user_id = u.user_id ORDER BY s.shout_time DESC LIMIT 0, 25";
$result = DB()->sql_query($sql_memcache);
while ($shout_row = DB()->sql_fetchrow($result))
{
$to_memcache[]=$shout_row;
}
$memcache->set('shout',$to_memcache,false,43200);
}
}

$template->assign_vars(array(
'U_SHOUTBOX' => append_sid("shoutbox.php"),
'U_SHOUTBOX_VIEW' => append_sid("shoutbox_view.php"),
));

$template->set_filenames(array('body' => 'shoutbox_body.tpl'));
$template->pparse('body');
?>
Буду очень признателен кто поможет полностью его адаптировать.
 

Exile

Администратор
#3
Ой, удалите уже этот чат отовсюду. Я сам-то не использую его уже год как, а вы все пытаетесь труп реанимировать прямыми вливаниями свежей крови. Дано перешел на решение от _Xz_, которое после и дорабатывал до приемлемого для себя функционала и производитльности.