Помощь - Поиск - Пользователи - Календарь
Полная версия: Опять прошу о маленькой помощи. Помогите, кто сможет
Онлайн-форум hostobzor.ru > Архив (темы до 1.06.2015). Только для чтения. > Коммерческий хостинг. Общие форумы > Общие вопросы
press
Вообщем, на форуме phpbb что-то слетело, переполнено кол-во сессий. Вообщем, "дырка" в самом phpbb, как отрапортовался хостер. Закэшировалось все и очищаться не желает ни в какую.

Код
phpBB : Critical Error

Error creating new session

DEBUG MODE

INSERT INTO phpbb_1sessions (session_id, session_user_id, session_start, session_time, session_ip, session_page, session_logged_in, session_admin) VALUES ('26ff17302df2308b169a8cf28527870d', -1, 1177892514, 1177892514, '558cca3c', 0, 0, 0)

Line : 220
File : sessions.php


Ладно. Бог с ним. Выход, слава Богу, нашелся.
(взято с форума хостера в ФАКе)

Цитата
Ошибка форума phpBB: Critical error. Error creating new session
Данная неработоспособность связана с "дыркой" в самом форуме phpbb.

Cостоит она в том, что форум хранит в БД все сессии, не удаляя их, или удаляя с такой периодичностью, что, в конце концов, таблица сессий переполняется и форум выдаёт ошибку "phpBB: Critical error. Error creating new session", т.к. не может работать дальше с таким количеством сессий.

Чтобы устранить ошибку выполните следующее:

1. откройте корневую директорию форума
2. откройте файл includes/sessions.php
3. найдите строку 152
4. замените эту строку
message_die(CRITICAL_ERROR,
'Error creating new session', '', __LINE__,
__FILE__, $sql);

на следующие:
$error = TRUE;
if (SQL_LAYER == "mysql" || SQL_LAYER == "mysql4")
{
$sql_error = $db->sql_error($result);
if ($sql_error["code"] == 1114)
{
$result = $db->sql_query('SHOW TABLE STATUS
LIKE "'.SESSIONS_TABLE.'"');
$row = $db->sql_fetchrow($result);
if ($row["Type"] == "HEAP")
{
if ($row["Rows"] > 2500)
{
$delete_order = (SQL_LAYER=="mysql4") ? "
ORDER BY session_time ASC" : "";
$db->sql_query("DELETE QUICK FROM ".
SESSIONS_TABLE."$delete_order LIMIT 50");
}
else
{
$db->sql_query("ALTER TABLE ".
SESSIONS_TABLE." MAX_ROWS=".($row["Rows"]+50));
}
if ($db->sql_query($sql))
{
$error = FALSE;
}
}
}
}
if ($error)
{
message_die(CRITICAL_ERROR, "Error creating new
session", "", __LINE__, __FILE__, $sql);
}

5. сохраните файл и скопируйте на сервер, записав поверх существующего.

Теперь вы можете не волноваться за переполнение таблицы сессий в базе данных форума phpBB.


Ладно. Открыл блокнотом (где все строчки съехали и ясен пень править что-либо крайне трудно) этот самый файлик php (18 Кб), заменил, как сказано выше, но толку чуть. Если кому не трудно, гляньте файлик с моими исправлениями, может там строчка съехала или еще что? Помогите, пожалуйста, ребят!!! sad.gif
Ilya Konovalenko
Для таких целей есть спец. редакторы, например PHPExpertEditor, блокнот тут вообще не понятно к чему.
Serzer
Советую использовать notepad++

Сорри, вы бы оригинальный файл приложили...
press
Цитата(X5X.RU @ 30.04.2007, 07:50) *

Для таких целей есть спец. редакторы, например PHPExpertEditor, блокнот тут вообще не понятно к чему.

А где его взять?

Цитата(Serzer @ 30.04.2007, 12:01) *

Советую использовать notepad++

Сорри, вы бы оригинальный файл приложили...

Так оригинальный файл и прриложен!
edogs
Попробуйте через phpmyadmin сделать repair таблице сессий phpbb и убедиться в том, что структура такая же как была при изначальной установке.
Во некоторых движках (и в phpbb тоже наблюдали такое) часто используемые таблицы (сессий как правило или счетчиков) просто "крашаться".
Невозможность вставить сессию может быть вызвана именно этим, а не переполнением таблицы сессий.
Да и в случае переполнения - вряд ли у Вас настолько большой онлайн что бы размера таблицы не хватало - мы бы просто очистили таблицу сессий. А тип таблицы сессий действительно HEAP?
press
Цитата(edogs @ 30.04.2007, 15:03) *

Попробуйте через phpmyadmin сделать repair таблице сессий phpbb и убедиться в том, что структура такая же как была при изначальной установке.
Во некоторых движках (и в phpbb тоже наблюдали такое) часто используемые таблицы (сессий как правило или счетчиков) просто "крашаться".
Невозможность вставить сессию может быть вызвана именно этим, а не переполнением таблицы сессий.
Да и в случае переполнения - вряд ли у Вас настолько большой онлайн что бы размера таблицы не хватало - мы бы просто очистили таблицу сессий. А тип таблицы сессий действительно HEAP?


Если б я чего еще в этом понимал biggrin.gif На сайте у хостера в ФАКе висит, видать, я не первый, кто об этом им писал.
Ilya Konovalenko
PHPExpertEditor - http://www.ankord.com, для версии 3 для жителей бывшего СССР лицензия бесплатно.
edogs
Цитата(press @ 30.04.2007, 14:11) *
Если б я чего еще в этом понимал biggrin.gif На сайте у хостера в ФАКе висит, видать, я не первый, кто об этом им писал.
Объясним то, о чем мы говорили. Открываете phpmyadmin на хостинге.
Находите свою базу для форума там, открываете её.
Ищите таблицу phpbb_1sessions, выбираете ее.
Выбираете пункт "операции" - выбираете "починить таблицу" и заодно "сбросить кэш таблицы.
После этого снова выбираете таблицу и убеждаетесь в том, что там есть поля session_id, session_user_id, session_start, session_time, session_ip, session_page, session_logged_in, session_admin
Можно так же выбрать пункт "очистить таблицу" после этого.
P.S.: Если решение которое висит у хостера Вам не подошло, то есть вероятность что причина в другом, поэтому мы и предложили попробовать вышеозначенный способ.
press
Цитата(edogs @ 30.04.2007, 16:24) *

Объясним то, о чем мы говорили. Открываете phpmyadmin на хостинге.
Находите свою базу для форума там, открываете её.
Ищите таблицу phpbb_1sessions, выбираете ее.
Выбираете пункт "операции" - выбираете "починить таблицу" и заодно "сбросить кэш таблицы.
После этого снова выбираете таблицу и убеждаетесь в том, что там есть поля session_id, session_user_id, session_start, session_time, session_ip, session_page, session_logged_in, session_admin
Можно так же выбрать пункт "очистить таблицу" после этого.
P.S.: Если решение которое висит у хостера Вам не подошло, то есть вероятность что причина в другом, поэтому мы и предложили попробовать вышеозначенный способ.


Не нашел где починить sad.gif

http://webfile.ru/1391584
edogs
Цитата(press @ 30.04.2007, 17:27) *

Не нашел где починить sad.gif
http://webfile.ru/1391584
На heap типе таки да, починки не будет. Тогда только проверьте что бы поля соответствовали, сбросьте хэш FLUSH TABLE `таблица` и почистите саму таблицу TRUNCATE TABLE `таблица`
Кстати, а сколько у Вас там записей всего? В таблице? И при каком одновременном онлайне максимум?
press
Цитата(edogs @ 30.04.2007, 18:41) *

На heap типе таки да, починки не будет. Тогда только проверьте что бы поля соответствовали, сбросьте хэш FLUSH TABLE `таблица` и почистите саму таблицу TRUNCATE TABLE `таблица`
Кстати, а сколько у Вас там записей всего? В таблице? И при каком одновременном онлайне максимум?

Ой, edogs, я даже не знаю. Хостер помог. Сейчас пытаюсь выяснить, в чем была проблема и не придется ли мне в след. раз чистить кэш. Вроде как патч должен заработать.
Странно, но РАНЬШЕ я видел у себя в phpmyadmin такой пункт, как "Починить таблицу", нужно было нажать "Пошел" и он все исправлял.
edogs
Цитата(press @ 30.04.2007, 18:18) *

Странно, но РАНЬШЕ я видел у себя в phpmyadmin такой пункт, как "Починить таблицу", нужно было нажать "Пошел" и он все исправлял.
Этот пункт есть у таблиц типа MyISAM и его нету у таблиц типа HEAP. Поэтому мы выше и спрашивали не heap ли таблица с сессиями.
P.S.: Если выясните как именно решил проблему хостер и поделитесь тут решением - будем благодарны, собираем подобное.
press
Цитата(edogs @ 30.04.2007, 20:21) *

Этот пункт есть у таблиц типа MyISAM и его нету у таблиц типа HEAP. Поэтому мы выше и спрашивали не heap ли таблица с сессиями.
P.S.: Если выясните как именно решил проблему хостер и поделитесь тут решением - будем благодарны, собираем подобное.


Принимайте smile.gif

Цитата
> СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!
> А в чем была проблема? Мне нужно будет в следующий раз очищать кэш в БД? Или
> он сам будет очищаться?


Цитата
Мы очистили таблицу БД, в которой хранятся данные о сессиях и также изменили скрипт так, как описано на нашем сайте.

В будущем подобной проблемы возникнуть не должно.

Всего доброго.

--
С уважением,
Vadim Sufiyarov


Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2025 Invision Power Services, Inc.