Ошибка форума 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.