Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Журнал Начинающего Программиста 29, 2010-11-08 15:40



Здравствуйте,



Ошибка форума phpBB
Critical error. Error creating new session

Данная неработоспособность связана с «дыркой» в самом форуме phpbb.

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

Чтобы устранить ошибку выполните следующее:
откройте корневую директорию форума
откройте файл includes/sessions.php
найдите строку 152

замените эту строку
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);
}

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

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

Проблемы работы функций strtoupper() и strtolower() с кириллицей

Проблемы при работе с кириллицей в PHP-скриптах функций strtoupper() и strtolower() возникают, когда неправильно определена текущая локаль (locale). Для правильного её определения следует воспользоваться функцией setlocale() в самом начале вашего PHP-сценария:
<?php

setlocale(LC_ALL, 'ru_RU.CP1251');

echo strtoupper('Работает!');

?>




 © 2010 LORD-EXPERT     • Forum   • Site     •


Ваши комментарии к рассылке. Архив рассылки


Общение/вопросы/и т.д.




В избранное