[Help] Проблема с постингом длинных сообщений

Статус
В этой теме нельзя размещать новые ответы.
На VPS 1,5 Ггц, дома 3. Что же он там делает-то?
 
Ты не читаешь что я пишу?

Я говорю что он может заменять стоп-слова, а это очень ресурсоемкая операция! Отключи ее!
 
Ты не читаешь что я пишу?
Я говорю что он может заменять стоп-слова, а это очень ресурсоемкая операция! Отключи ее!
Ничего такого я там не обнаружил. Несмотря на то, что скрипт грузится в течении max_execution_time, сообщение добавляется. Но при этом не происходит обновление количества постов и т.п., а в колонке последнее сообщение появляется вот это
1970-01-01 03:00
Гость
 
что-то такое есть у тебя в posting.php?
PHP:
		$preview_message = autocensor(stripslashes(prepare_message(addslashes(unprepare_message($message)), $bbcode_on, $smilies_on, $bbcode_uid)));
		$preview_subject = autocensor($subject);
 
Функции autocensor нет вообще. Сейчас я пытаюсь локализовать место ошибки.
Она здесь
PHP:
	if ($userdata['user_id'] != BOT_UID)
	{
		add_search_words($post_id, stripslashes($post_message), stripslashes($post_subject), $bbcode_uid);
	}

А именно в функции strip_bbcode
 
Я не могу понять почему он виснет.
Неужели ни у кого нет этой проблемы, ведь я использую стандартную версию ТП?
 
Думаю некто не сидит на VPS с трекерами ;)

Попробуй фукнкцию оптимизировать, свои решения Я не выдаю.
Но помню что что-то похожее, с ней тоже связанное было ;)
 
StirolXXX, а что это за функция add_search_words? Как я понял она заполняет табличку bb_posts_search. А что это за таблица и что это за слова? Закомментил вызов функции strip_bbcode в функции extract_search_words и все работает;) Может add_search_words вообще не нужна?
 
Она нужна - она убирает из текста бб-коды и вырезает слова которые больше 2 раз встречаются.

Потом по этим словам работает полнотекстовый поиск mySQL...

Покажи свои функции add_search_words и strip_bbcode_uid и extract_search_words, а так-же strip_bbcode
 
function add_search_words
PHP:
function add_search_words ($post_id, $post_message, $post_title = '', $bbcode_uid = '', $only_return_words = false)
{
	global $db;
	$text  = $post_title .' '. $post_message;
	$text  = strip_bbcode_uid($text, $bbcode_uid);
	$words = ($text) ? extract_search_words($text) : array();
	if ($only_return_words)
	{
		return join("\n", $words);
	}
	else
	{
		$db->query("DELETE FROM ". POSTS_SEARCH_TABLE ." WHERE post_id = $post_id");
		if ($words_sql = $db->escape(join("\n", $words)))
		{
			$db->query("REPLACE INTO ". POSTS_SEARCH_TABLE ." (post_id, search_words) VALUES ($post_id, '$words_sql')");
		}
	}
}
function strip_bbcode_uid
PHP:
function strip_bbcode_uid ($text, $bbcode_uid)
{
	return ($bbcode_uid) ? preg_replace("#:(\d+:)*?$bbcode_uid#", '', $text) : $text;
}
function extract_search_words
PHP:
function extract_search_words ($text)
{
	global $bb_cfg;
	$max_words_count = $bb_cfg['max_search_words_per_post'];
	$min_word_len    = max(2, $bb_cfg['search_min_word_len'] - 1);
	$max_word_len    = $bb_cfg['search_max_word_len'];
	$text = ' ' . str_compact(strip_tags(strtolower($text))) . ' ';
	$text = str_replace(array('[', ']'), array('[', ']'), $text);
	// HTML entities like  
	$text = preg_replace('/(\w*?)&#?[0-9a-z]+;(\w*?)/i', '', $text);
	// Remove URL's
	$text = preg_replace('#\b[a-z0-9]+://[0-9a-z\.\-]+(/[0-9a-z\?\.%_\-\+=&/]+)?#', ' ', $text);
	$text = strip_bbcode($text);
	// Filter out characters like ^, $, &, change "it's" to "its"
	$text = preg_replace('#\W#', ' ', $text);
	// short & long words
	$text = preg_replace('#(?<=^|\s)(\S{1,'.$min_word_len.'}|\S{'.$max_word_len.',}|\W*)(?=$|\s)#', ' ', $text);
	$text = remove_stopwords($text);
#	$text = replace_synonyms($text);
	// Trim 1+ spaces to one space and split this string into unique words
	$text = array_unique(explode(' ', str_compact($text)));
	if (sizeof($text) > $max_words_count)
	{
#		shuffle($text);
		$text = array_splice($text, 0, $max_words_count);
	}
	return $text;
}
function strip_bbcode
PHP:
function strip_bbcode ($message, $stripquotes = true, $fast_and_dirty = false, $showlinks = true)
{
	$find = array();
	$replace = array();
	if ($stripquotes)
	{
		// [quote=username] and [quote]
		$message = strip_quotes($message);
	}
	// a really quick and rather nasty way of removing bbcode
	if ($fast_and_dirty)
	{
		// any old thing in square brackets
		$find[] = '#\[.*/?\]#siU';
		$replace = '';
		$message = preg_replace($find, $replace, $message);
	}
	// the preferable way to remove bbcode
	else
	{
		// simple links
		$find[] = '#\[(email|url)=("??)(.+)\\2\]\\3\[/\\1\]#siU';
		$replace[] = '\3';
		// named links
		$find[] = '#\[(email|url)=("??)(.+)\\2\](.+)\[/\\1\]#siU';
		$replace[] = ($showlinks ? '\4 (\3)' : '\4');
		// smilies
		$find[] = '#(?<=^|\W)(:\w+?:)(?=$|\W)#';
		$replace[] = '';
		// replace
		$message = preg_replace($find, $replace, $message);
		// strip out all other instances of [x]...[/x]
		while (preg_match('#\[([a-z]+)\s*?(?:[^\]]*?)\](.*?)(\[/\1\])#is', $message, $m))
		{
			$message = str_replace($m[0], $m[2], $message);
		}
		$replace = array('[*]', '[hr]', '[br]', '[tab]');
		$message = str_replace($replace, ' ', $message);
	}
	return $message;
}
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху