Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#576 2013-07-22 16:23:49

Джонни
Участник
Зарегистрирован: 2013-05-15
Сообщений: 44

Re: Сборка FluxBB 1.5.xx от Visman'а

Это просто крайне критично для меня, опросы очень большую роль играют. Помогите, пожалуйста.

Offline

#577 2013-07-22 16:35:11

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

@Джонни, проверяй чем отличаются файлы viewtopic.php и include/poll.php от файлов из сборки.
Смотри лог ошибок сервера.
Воспользуйся валидатором http://validator.w3.org/ и наведи порядок на сайте.

Offline

#578 2013-07-22 16:38:15

Джонни
Участник
Зарегистрирован: 2013-05-15
Сообщений: 44

Re: Сборка FluxBB 1.5.xx от Visman'а

Poll.php я точно не трогал.

Offline

#579 2013-07-22 16:41:51

Джонни
Участник
Зарегистрирован: 2013-05-15
Сообщений: 44

Re: Сборка FluxBB 1.5.xx от Visman'а

Замена viewtopic.php на тот, что из архива, эффекта не дала.

Offline

#580 2013-07-22 16:45:21

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

@Джонни, я выше написал, что надо сделать в первую очередь.
Достаточно потрогать viewtopic.php, чтобы сломать голосование.
Про лог ошибок говорю второй раз, ни какой реакции.
И убери со страниц форума криво вставленный блок который вызывает 26 ошибок при проверке валидности http://validator.w3.org/check?uri=http% … ne&group=0
+ вот это

Джонни пишет:

Просто весь трафик на домен идёт через фильтр анти ДДоСа, поэтому у всех 1 адрес.

не имею понятие как может влиять на передачу данных, когда быстрая переадресация идет при отправке формы с голосованием.

Offline

#581 2013-07-22 16:57:33

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

Для проверки передачи данных в файле viewtopic.php строку

	poll_vote($id, $pun_user['id']);

замени на строку

	exit(var_export($_POST, true));
	poll_vote($id, $pun_user['id']);

и покажи что выдаст при разных выборах вариантов голосования.

Offline

#582 2013-07-22 18:38:35

Джонни
Участник
Зарегистрирован: 2013-05-15
Сообщений: 44

Re: Сборка FluxBB 1.5.xx от Visman'а

array ( 'poll_max' => array ( 1 => '4', ), 'poll_vote' => array ( 1 => array ( 0 => '1', ), ), 'poll_type' => array ( 1 => '1', ), 'poll_ques' => '1', 'poll_csrf' => '6a3749e1661797f9213a5540a70783ef57f3c2e0', 'poll_submit' => 'Голосовать!', )

array ( 'poll_max' => array ( 1 => '4', ), 'poll_vote' => array ( 1 => array ( 0 => '2', ), ), 'poll_type' => array ( 1 => '1', ), 'poll_ques' => '1', 'poll_csrf' => '6a3749e1661797f9213a5540a70783ef57f3c2e0', 'poll_submit' => 'Голосовать!', )

Вот.
Это я выбрал первый и второй варианты.

Редактировался Джонни (2013-07-22 18:40:51)

Offline

#583 2013-07-22 18:58:16

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

@Джонни, данные поступают.
Теперь в файле include/poll.php измени функцию poll_vote на эту

function poll_vote($tid, $uid)
{
	global $db;

	if (poll_bad() || !poll_can_vote($tid, $uid)) poll_mess('Err1');
exit('1');
	$csrf = poll_post('poll_csrf');
	$ques = poll_post('poll_ques');
	$type = poll_post('poll_type');
	$votes = poll_post('poll_vote');
	$amax = poll_post('poll_max');
exit('2');
	if (is_null($csrf) || is_null($ques) || is_null($type) || is_null($votes) || is_null($amax)) poll_mess('Err2');
exit('3');
	if (!is_array($type) || !is_array($votes) || !is_array($amax)) poll_mess('Err2');
exit('4');
	$type = array_map('intval', $type);
	$amax = array_map('intval', $amax);
	$ques = intval($ques);
exit('5');
	$csrf2 = pun_hash($tid.(pun_hash($uid.$ques.implode('0',$type))).get_remote_address().implode('.',$amax));
exit('6');
	if ($csrf2 != $csrf) poll_mess('Err2');
exit('7');
	$kol = 0;
	foreach($votes as $k => $vote)
	{
		if ($k < 1 || $k > $ques) poll_mess('Err3');
		$kol++;
		$kk = 0;
		$vote = array_map('intval', $vote);
		foreach($vote as $i => $vo)
		{
			if ($type[$k] < 2 && $i != 0) poll_mess('Err2');
			if ($type[$k] < 2 && $vo < 1) poll_mess('Err2');
			if ($type[$k] < 2 && $vo > $amax[$k]) poll_mess('Err2');
			if ($type[$k] > 1 && $i == 0) poll_mess('Err2');
			if ($type[$k] > 1 && $i > $amax[$k]) poll_mess('Err2');
			if ($type[$k] > 1 && $vo != 1) poll_mess('Err2');
			$kk++;
		}
		if ($type[$k] < 2 && $kk != 1) poll_mess('Err4', $k);
		if ($type[$k] > 1 && ($kk < 1 || $kk > $type[$k])) poll_mess('Err5', $k, $type[$k]);
	}
	if ($kol != $ques) poll_mess('Err6');
exit('8');
	$arr = array();
	foreach($votes as $k => $vote)
	{
		$vote = array_map('intval', $vote);
		foreach($vote as $i => $vo)
		{
			if ($type[$k] < 2) $j = $vo;
			else $j = $i;
			$arr[] = '(question='.$k.' AND field='.$j.')';
    }
	}
exit('9');
	if (!empty($arr))
		$db->query('UPDATE '.$db->prefix.'poll SET votes=votes+1 WHERE tid='.$tid.' AND ('.implode(' OR ', $arr).')') or error('Unable to update poll choice', __FILE__, __LINE__, $db->error());
exit('10');
	$db->query('INSERT INTO '.$db->prefix.'poll_voted (tid, uid, rez) VALUES ('.$tid.','.$uid.',\''.$db->escape(serialize($votes)).'\')') or error('Unable to save vote', __FILE__, __LINE__, $db->error());
	$db->query('UPDATE '.$db->prefix.'topics SET poll_kol=poll_kol+1 WHERE id='.$tid) or error('Unable to update topic', __FILE__, __LINE__, $db->error());
exit('11');
	poll_cache_delete($tid);
exit('12');
}

Голосуй первый раз, должно выдать 1. Удали код

exit('1');

.
Голосуй второй раз, должно выдать 2. Удали код

exit('2');

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

З.Ы. В файле viewtopic.php удали строчку

	exit(var_export($_POST, true));

чтобы вызов функции при голосовании проходил.

Offline

#584 2013-07-22 18:59:35

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

@Джонни, база данных какая используется?

Offline

#585 2013-07-22 19:05:29

Джонни
Участник
Зарегистрирован: 2013-05-15
Сообщений: 44

Re: Сборка FluxBB 1.5.xx от Visman'а

MySQL.

Offline

#586 2013-07-22 19:07:54

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

@Джонни, InnoDB используется?

Offline

#587 2013-07-22 19:09:41

Джонни
Участник
Зарегистрирован: 2013-05-15
Сообщений: 44

Re: Сборка FluxBB 1.5.xx от Visman'а

Попробовал удалить блоки описания и объявления, но результата всё равно нет. Опрос не работает.
Хотя стоп... А может это быть из-за этого, что голосуют все с одного IP?

Редактировался Джонни (2013-07-22 19:09:56)

Offline

#588 2013-07-22 19:19:17

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

Джонни пишет:

А может это быть из-за этого, что голосуют все с одного IP?

Нет.
@Джонни, InnoDB используется в базе?

UP
Что в config.php в строке $db_type = ... написано?

Редактировался Visman (2013-07-22 19:21:26)

Offline

#589 2013-07-22 19:27:32

Джонни
Участник
Зарегистрирован: 2013-05-15
Сообщений: 44

Re: Сборка FluxBB 1.5.xx от Visman'а

$db_type = 'mysqli_innodb';

Offline

#590 2013-07-22 19:33:19

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

Сделай бэкап базы и поставь вместо

$db_type = 'mysqli_innodb';

это

$db_type = 'mysqli';

Потом попробуй проголосовать.
З.Ы. Была у кого-то проблема в InnoDB, но у меня и на локальном компе и на тестовом форуме работает все нормально.

Offline

#591 2013-07-22 19:34:53

Джонни
Участник
Зарегистрирован: 2013-05-15
Сообщений: 44

Re: Сборка FluxBB 1.5.xx от Visman'а

Но по-моему у меня опросы работали нормально. Сейчас попробую.

Offline

#592 2013-07-22 19:38:17

Джонни
Участник
Зарегистрирован: 2013-05-15
Сообщений: 44

Re: Сборка FluxBB 1.5.xx от Visman'а

Заработало. smile
Никаких больше косяков не вылезет из-за смены типа БД?

Offline

#593 2013-07-22 19:59:34

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

@Джонни, косяков не должно быть.
А вот почему опросы с InnoDB перестали работать не понятно. Тряси админов, чего они в настройках сервера меняли.

Offline

#594 2013-07-22 20:15:43

Джонни
Участник
Зарегистрирован: 2013-05-15
Сообщений: 44

Re: Сборка FluxBB 1.5.xx от Visman'а

Там хостинг идиотский. Буду менять.
Огромное спасибо!

Offline

#595 2013-07-23 08:48:23

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

могу предположить, что дело в транзакциях. innodb версия характерна как раз транзакциями.

движок устроен так, что выдает commit только один раз -- в конце работы, но если была ошибка MySQL (какбы некритичная для работы), то коммит не пройдет целиком. на то она и транзакция!

дай бог памяти, есть в движке fluxbb место, связанное с небуферизованным query и попыткой заполнить какой-то кеш, то есть вызовается еще однин query пока предыдущий не завершен. эта ошибка не сопровождается die(), но это ошибка и она может сыграть злую шутку.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#596 2013-07-23 08:57:08

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

@artoodetoo, у меня не воспроизводится ситуация с неработоспособностью innodb.
Как узнать в чем конкретно причина? Логи самого mysql могут что содержать при такой ситуации?

UP
А может транзакция как раз просто не закрывается?
Выход-то при голосовании идет через

	header('Location: viewtopic.php?id='.$id.((isset($_GET['p']) && $_GET['p'] > 1) ? '&p='.intval($_GET['p']) : ''));
	exit;

Редактировался Visman (2013-07-23 08:59:45)

Offline

#597 2013-07-23 13:15:20

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

@Джонни, проведи тест работоспособности опроса.
В файле viewtopic.php замени

if (!is_null(poll_post('poll_submit')))
{
	poll_vote($id, $pun_user['id']);

	header('Location: viewtopic.php?id='.$id.((isset($_GET['p']) && $_GET['p'] > 1) ? '&p='.intval($_GET['p']) : ''));
	exit;
}

на это

if (!is_null(poll_post('poll_submit')))
{
	poll_vote($id, $pun_user['id']);

	// End the transaction
	$db->end_transaction();

	// Close the db connection (and free up any result data)
	$db->close();

	header('Location: viewtopic.php?id='.$id.((isset($_GET['p']) && $_GET['p'] > 1) ? '&p='.intval($_GET['p']) : ''));
	exit;
}

и включи mysqli_innodb в конфиге.
После этого создай опрос и проверь голосование в нем.

Offline

#598 2013-07-23 16:16:11

Джонни
Участник
Зарегистрирован: 2013-05-15
Сообщений: 44

Re: Сборка FluxBB 1.5.xx от Visman'а

Сделаю. А подскажите, пожалуйста, можно ли запретить пользователям использовать gif-анимации в качестве аватар? Непонятно почему, но при прокрутке страниц, если у пользователя в подписи или на аватаре есть гиф, ощущаются лаги.

Offline

#599 2013-07-23 17:14:01

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

@Джонни, это проблемы браузеров, а не форума.
По умолчанию на форуме разрешены аватары размером 150х150 точек и 10кБайт объемом. Если уж в 10кБайт пихать анимацию, то картинка будет совсем мелкая.

Offline

#600 2013-07-24 08:58:12

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: Сборка FluxBB 1.5.xx от Visman'а

Visman пишет:

А может транзакция как раз просто не закрывается?
Выход-то при голосовании идет через

	header('Location: viewtopic.php?id='.$id.((isset($_GET['p']) && $_GET['p'] > 1) ? '&p='.intval($_GET['p']) : ''));
	exit;

Я бы предложил такие места заменить на вызов redirect(). Тогда завершение будет штатным.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

Подвал доски

Под управлением FluxBB. Хостинг Hostens