Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Сообщаем об ошибках phpBB 3.3.x разработчикам

Проблемы с установкой или работой phpBB 3.3.x? Получите помощь здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16370
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1745 раз

Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение rxu »

Об ошибках, выявленных в работе phpBB 3.3 Proteus, сообщаем в этой теме.
Ошибками является некорректная работа ядра phpBB, подтвержденная на последней актуальной версии phpBB, требующая устранения в коде ядра, и не связанная с работой расширений, сторонних стилей оформления, неверной работой серверного оборудования или серверного софта, а также с некорректными действиями администратора.
Запросы поддержки также не размещаются в данной теме.
Изображение
dimassamid
phpBB 2.0.0
Сообщения: 205
Стаж: 17 лет 5 месяцев
Благодарил (а): 58 раз
Поблагодарили: 84 раза

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение dimassamid »

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

:dontknow
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16370
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1745 раз

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение rxu »

Странно, т.к. при пустой таблице сессий логика кода работает по второму варианту. Ладно.
Изображение
dimassamid
phpBB 2.0.0
Сообщения: 205
Стаж: 17 лет 5 месяцев
Благодарил (а): 58 раз
Поблагодарили: 84 раза

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение dimassamid »

Да, логично, но таблица сессий почему-то всё равно влияет.

Я не грешил бы на движок, если бы не увидел точно такую же проблему на баг-трекере. Там у товарища один в один как у меня.

Я ещё буду экспериментировать и, по возможности, постараюсь дать какие-либо доступы, чтобы можно было потрогать. Вслепую конечно тяжело делать такую диагностику.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16370
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1745 раз

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение rxu »

СУБД какая?
Автоматическая очистка сессий не отключена (session_gc)? Какая длительность сессии (session_length) установлена в настройках?
Изображение
im0
phpBB 1.4.0
Сообщения: 31
Стаж: 8 лет 2 месяца
Благодарил (а): 15 раз
Поблагодарили: 9 раз

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение im0 »

Я вообще не понимаю как в принципе этот код может правильно работать…

Вот это ключевой момент
dimassamid писал(а): 10.06.2023 1:05 Если из таблицы phpbb_sessions удалять по одному строки с юзерами, то они тут же встают куда-нибудь в середину списка и сортируются нормально. Соответственно, если удалить все записи, то сортировка всех юзеров будет работает корректно.

Насколько я помню, последнее посещение зависит от наличия открытой сессии, и хранится в сессионной таблице пока пользователь не выйдет и тогда уже оно копируется в таблицу пользователей. А memberlist просто берёт только таблицу пользователей и получает список их идентификаторов на нужной странице, сортируя по последнему визиту из этой таблицы (без учёта сессий). https://github.com/phpbb/phpbb/blob/442 ... .php#L1605

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

SELECT u.user_id FROM users u WHERE u.user_type IN (0, 3, 1) ORDER BY u.user_lastvisit DESC 

А уже потом, отдельно подтягивает сессии для ранее найденных пользователей, и сортирует список пользователей (на странице) по правильному последнему посещению (с учётом данный из сессии).
Последний раз редактировалось im0 10.06.2023 13:36, всего редактировалось 1 раз.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16370
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1745 раз

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение rxu »

Если крон очистки сессий включён и работает (function session_gc()), то поле user_lastvisit регулярно обновляется и находится в актуальном состоянии (равном наибольшему session_time).

Отправлено спустя 2 минуты 44 секунды:
Но вопрос даже не в этом, а в том, что даже этот один запрос некорректно выбирает из таблицы пользователей.

Отправлено спустя 3 минуты 30 секунд:
Есть подозрение, что ORDER BY в сочетании с LIMIT шалит на разных серверах по-разному. В каких-то вариантах сначала сортирует все найденные записи, затем отрезает LIMIT, а в каких-то наоборот.
Изображение
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16370
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1745 раз

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение rxu »

dimassamid, попробуйте в memberlist.php в запросе

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

		// Get us some users :D
		$sql = "SELECT u.user_id
			FROM " . USERS_TABLE . " u
				$sql_from
			WHERE " . $db->sql_in_set('u.user_type', $user_types) . "
				$sql_where
			ORDER BY $order_by";

в конце добавить поле сортировки user_id, т.е.

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

		// Get us some users :D
		$sql = "SELECT u.user_id
			FROM " . USERS_TABLE . " u
				$sql_from
			WHERE " . $db->sql_in_set('u.user_type', $user_types) . "
				$sql_where
			ORDER BY $order_by, user_id";
Изображение
dimassamid
phpBB 2.0.0
Сообщения: 205
Стаж: 17 лет 5 месяцев
Благодарил (а): 58 раз
Поблагодарили: 84 раза

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение dimassamid »

rxu писал(а): 10.06.2023 6:18СУБД какая?
MySQL(i) 5.7.21
rxu писал(а): 10.06.2023 13:52 Если крон очистки сессий включён и работает
Задача cron.task.core.tidy_sessions запускается раз в 10 минут.
rxu писал(а): 10.06.2023 13:53 в конце добавить поле сортировки user_id
Ничего не поменялось в сортировке
im0
phpBB 1.4.0
Сообщения: 31
Стаж: 8 лет 2 месяца
Благодарил (а): 15 раз
Поблагодарили: 9 раз

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение im0 »

rxu писал(а): 10.06.2023 13:52 Если крон очистки сессий включён и работает (function session_gc()), то поле user_lastvisit регулярно обновляется и находится в актуальном состоянии
Действительно, совсем забыл про cron. Тогда стоит проверить что он действительно запускается и отрабатывает, ведь тогда не должно влиять удаление сессионных записей. А на счёт регулярно…
dimassamid писал(а): 10.06.2023 14:38 Задача cron.task.core.tidy_sessions запускается раз в 10 минут.
Запускаться то она может и запускается, но отрабатывает не чаще чем раз в час — значение параметра
config[session_gc''] = 3600 (по крайней мере у меня так), то есть «выпадать из сортировки» могут пользователи, залогинившиеся не более часа назад.
Последний раз редактировалось im0 10.06.2023 14:55, всего редактировалось 1 раз.
dimassamid
phpBB 2.0.0
Сообщения: 205
Стаж: 17 лет 5 месяцев
Благодарил (а): 58 раз
Поблагодарили: 84 раза

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение dimassamid »

Параметры такие:
session_length: 86400
session_gc: 3600

Отправлено спустя 14 минут 21 секунду:
Установил длительность сессии сейчас на 3600
Теперь "выпадают из сортировки" только те юзеры, которые посетили конференцию в течение последнего часа.

Отправлено спустя 5 минут 57 секунд:
Страница 1 
1.png
Страница 2 
2.png
Страница 3 
3-я страница уже нормальная
3.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
im0
phpBB 1.4.0
Сообщения: 31
Стаж: 8 лет 2 месяца
Благодарил (а): 15 раз
Поблагодарили: 9 раз

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение im0 »

dimassamid писал(а): 10.06.2023 15:14 Установил длительность сессии сейчас на 3600
Я посомневался, но оказывается session_length тоже влияет на session_gc() — похоже он не рассматривает «короткие сесии»

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

WHERE session_time < ' . ($this->time_now - (int) $config['session_length'])

то есть получается, чтобы держать таблицу пользователей в актуальном состоянии (обновлять дату последнего визита) — надо уменьшать оба параметра.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16370
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1745 раз

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение rxu »

Дело только в том, почему выборка и сортировка происходят постранично, а не в целом. Gараметры сессии и очистки на это не влияют, только SQL.
Изображение
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16370
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1745 раз

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение rxu »

dimassamid, а SQL explain что сообщает по этой выборке? Сортировка файлов задейстована?
Изображение
im0
phpBB 1.4.0
Сообщения: 31
Стаж: 8 лет 2 месяца
Благодарил (а): 15 раз
Поблагодарили: 9 раз

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение im0 »

rxu писал(а): 10.06.2023 15:28 почему выборка и сортировка происходят постранично, а не в целом
возможно я не понял вопрос, но выше я пытался разобрать как так получается: выбирается страница из таблицы, отсортированной по одному параметру (не совсем актуальному), а потом эта страница сортируется уже по другому параметру (более свежему значению последнего визита). PS. Там ссылки на код добавлены.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16370
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1745 раз

Re: Сообщаем об ошибках phpBB 3.3.x разработчикам

Сообщение rxu »

im0, в этом случае багаж появлялся бы у всех и постоянно. Такого нет.
Изображение

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