[教學] 'phpbb_sessions' is full
發表於 : 2003-05-04 23:03
'phpbb_sessions' is full 錯誤訊息例子:
* 在進行修正前請備份你的資料庫(或至少 sessions table)和所有 phpbb 檔案(或至少 includes/sessions.php)
方法一:自動清空 sessions table(Automatic table emptying script)
includes/sessions.php 尋找:
取代為:
方法二:手動清空 sessions table(Emptying the table manually)
使用 phpMyAdmin - 在 phpbb_sessions 欄位裡按下 Empty,然後選擇 OK 清空欄位
你將會看到\r
方法三:限制一個 IP 可以擁有的 session(Limiting the number of sessions per IP)
這個方法適用於如果同一個用戶產生過多的 session (Sessions table flooding)
includes/sessions.php 尋找:
之後加入:
如何限制 sessions 數量
尋找:
這是個治標不治本的方法,這個修正可以增加 sessions table 可容納的 sessions 數量,但是仍然可能出現 'phpbb_sessions' is full 的問題
使用 phpMyAdmin - 在 SQL 裡鍵入\r
如果您的 phpbb 資料表使用其他名稱請自行更改\r
方法五:把 phpbb_sessions 從 HEAP 改成 MyISAM(Making the table's type MyISAM)
照官網的說法,這應該是最後(其他修正都沒有用時)才使用的修正法
使用 phpMyAdmin - 在 phpbb_sessions 裡選擇 Properties -> Options,在 Table type 裡選擇 MyISAM
使用 command line - 鍵入\r
官方原文: http://www.phpbb.com/kb/article.php?article_id=42
~Mac
修正phpBB : Critical Error 寫:Error creating new session
DEBUG \r
SQL Error : 1114 The table 'phpbb_sessions' is full
INSERT INTO phpbb_sessions (session_id, session_user_id, session_start, session_time, session_ip, session_page, session_logged_in) VALUES ('544c13e2eea831bb6402a4b35f78e96a', -1, 1041341439, 1041341439, '7f000001', 0, 0)
Line : 152
File : /usr/local/apache/html/phpBB/includes/sessions.php
* 在進行修正前請備份你的資料庫(或至少 sessions table)和所有 phpbb 檔案(或至少 includes/sessions.php)
方法一:自動清空 sessions table(Automatic table emptying script)
includes/sessions.php 尋找:
代碼: 選擇全部
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);
}使用 phpMyAdmin - 在 phpbb_sessions 欄位裡按下 Empty,然後選擇 OK 清空欄位
你將會看到\r
使用 command line - 鍵入\rphpMyAdmin 寫:Do you really want to :
DELETE FROM `phpbb_sessions`
如果您的 phpbb 資料表使用其他名稱請自行更改\rcommand line 寫:DELETE FROM phpbb_sessions;
方法三:限制一個 IP 可以擁有的 session(Limiting the number of sessions per IP)
這個方法適用於如果同一個用戶產生過多的 session (Sessions table flooding)
includes/sessions.php 尋找:
代碼: 選擇全部
//
// Create or update the session
//
$sql = "UPDATE " . SESSIONS_TABLE . "
SET session_user_id = $user_id, session_start = $current_time, session_time = $current_time, session_page = $page_id, session_logged_in = $login
WHERE session_id = '" . $session_id . "'
AND session_ip = '$user_ip'";
if ( !$db->sql_query($sql) || !$db->sql_affectedrows() )
{
$session_id = md5(uniqid($user_ip)); 代碼: 選擇全部
$sql = "SELECT COUNT(*) as numrows FROM ". SESSIONS_TABLE ." WHERE session_ip = '$user_ip'";
$result = $db->sql_query($sql);
if ( !$result )
{
message_die(CRITICAL_ERROR, 'Error checking existing sessions', '', __LINE__, __FILE__, $sql);
}
$numrows = $db->sql_fetchrow($result);
if($numrows['numrows'] > 4)
{
$delete_limit = $numrows['numrows'] - 4;
switch( SQL_LAYER )
{
case 'mysql4':
$sql = "DELETE FROM ". SESSIONS_TABLE ." WHERE session_ip = '$user_ip' ORDER BY session_start ASC LIMIT $delete_limit";
break;
default:
$sql = "SELECT session_start FROM ". SESSIONS_TABLE ." WHERE session_ip = '$user_ip' ORDER BY session_start DESC LIMIT 4";
$result = $db->sql_query($sql);
if ( !$db->sql_query($sql) )
{
message_die(CRITICAL_ERROR, 'Error select session data', '', __LINE__, __FILE__, $sql);
}
$session_rows = $db->sql_fetchrowset($result);
$sql = "DELETE FROM ". SESSIONS_TABLE ." WHERE session_ip = '$user_ip' AND session_start < ".$session_rows[3]['session_start'];
}
if ( !$db->sql_query($sql) )
{
message_die(CRITICAL_ERROR, 'Error deleting old sessions', '', __LINE__, __FILE__, $sql);
}
}如何限制 sessions 數量
尋找:
如果要刪除當一個用戶擁有超過 10 個 sessions 時,把數字改成:includes/sessions.php 寫:if($numrows['numrows'] > 4)
方法四:增加 table 可容納的數量(Increasing the table's MAX_ROWS)includes/sessions.php 寫:if($numrows['numrows'] > 10)
這是個治標不治本的方法,這個修正可以增加 sessions table 可容納的 sessions 數量,但是仍然可能出現 'phpbb_sessions' is full 的問題
使用 phpMyAdmin - 在 SQL 裡鍵入\r
使用 command line - 鍵入\rMySQL 寫:ALTER TABLE phpbb_sessions MAX_ROWS = 2500;
紅色數字的部分請自行更改\rcommand line 寫:ALTER TABLE phpbb_sessions MAX_ROWS = 2500;
如果您的 phpbb 資料表使用其他名稱請自行更改\r
方法五:把 phpbb_sessions 從 HEAP 改成 MyISAM(Making the table's type MyISAM)
照官網的說法,這應該是最後(其他修正都沒有用時)才使用的修正法
使用 phpMyAdmin - 在 phpbb_sessions 裡選擇 Properties -> Options,在 Table type 裡選擇 MyISAM
使用 command line - 鍵入\r
如果您的 phpbb 資料表使用其他名稱請自行更改\rcommand line 寫:ALTER TABLE phpbb_sessions TYPE = MYISAM;
官方原文: http://www.phpbb.com/kb/article.php?article_id=42
~Mac