vBulletin HACK----讨论区数据库空间大小统计

原因:所谓“寸土尺金”,数据库空间可是很昂贵的东西——对于我们这些小玩家来说。所以这个东西应该有用。
优点:直接统计当前讨论区内所有帖子、模板这两个占空间最大的表的大小,能按论坛、用户查询。
自评:除了帖子和模板外,还有论坛的描述、用户的签名是比较会占数据库空间的,但一般可以忽略,所以就……

步骤:
⒈打开 admin/index.php ,查找“
<table width="100%" border=0 cellpadding=0 cellspacing=0 align="center"><tr><td bgcolor="#336699">
<table width="100%" border=0 cellpadding=3 cellspacing=2>
<tr>
    <td align="right"><font color="#ffffff"><p><b>用户群权限</b></p></td>
</tr>
    <td bgcolor="#ffffff"><P>
<a href="usergroup.php?action=add">新增</a><br>
<a href="usergroup.php?action=modify">修改</a><br>
<a href="forumpermission.php?action=modify">修改论坛</a></p></td>
</tr>
</table>
</td></tr></table>
<BR>
”,在后面加入“
<table width="100%" border=0 cellpadding=0 cellspacing=0 align="center"><tr><td bgcolor="#336699">
<table width="100%" border=0 cellpadding=3 cellspacing=2>
<tr>
    <td align="right"><font color="#ffffff"><p><b>大小统计</b></p></td>
</tr>
    <td bgcolor="#ffffff"><P>
<a href="count.php?action=forum">论坛</a><br>
<a href="count.php?action=user">用户</a></td>
</tr>
</table>
</td></tr></table>
<BR>
”,保存退出;

⒉建立 count.php 于 admin 目录下,内容如下:“
<?php

require ("global.php");

?>
<html>
<head>
<link rel="stylesheet" href="style.css">
</head>
<body>
<?php

if (isset($action)==0) {
  
$action="bbs";
}

function 
getsize($oldsize) {
  
$newsize=iif($oldsize>1024,number_format($oldsize/1024,1)."K",$oldsize);
  return 
$newsize;
}

// ###################### Start forum #######################
if ($action=="forum") {

  
$posts=$DB_site->query_first("SELECT SUM(LENGTH(pagetext)) AS sizes FROM post");
  
$postsize=$posts[sizes];
  
$temps=$DB_site->query_first("SELECT SUM(LENGTH(template)) AS sizes FROM template");
  
$tempsize=$temps[sizes];
  echo 
"<p>此讨论区帖子 ".getsize($postsize)." 字节, 模板 ".getsize($tempsize)." 字节, 总共 ".getsize($postsize+$tempsize)." 字节.";

  
$categorys=$DB_site->query("SELECT categoryid,title,displayorder FROM category ORDER BY displayorder");
  while (
$category=$DB_site->fetch_array($categorys)) {

    
$categoryid=$category[categoryid];
    
$categorytitle=htmlspecialchars($category[title]);

    echo 
"<ol>";
    echo 
"<li>$categorytitle<ol>";

    
$forums=$DB_site->query("SELECT forumid,title,replycount,threadcount FROM forum WHERE active=1 AND categoryid=$categoryid ORDER BY displayorder");
    while (
$forum=$DB_site->fetch_array($forums)) {
      
$forumtitle htmlspecialchars($forum[title]);
      
$forumid $forum[forumid];
      
$forumsize 0;
      
$threadcount $forum[threadcount];
      
$replycount $forum[replycount];
      
$threads=$DB_site->query("SELECT threadid FROM thread WHERE forumid=$forumid");
      while (
$thread=$DB_site->fetch_array($threads)) {
        
$threadid $thread[threadid];
        
$postsize $DB_site->query_first("SELECT SUM(LENGTH(pagetext)) AS sizes FROM post WHERE threadid=$threadid");
        
$forumsize += $postsize[sizes];
      }
      echo 
"<li><a href=forum.php?action=edit&forumid=$forumid>$forumtitle</a> : $threadcount 个话题, $replycount 个回复, 总共 ".getsize($forumsize)." 字节</li>";
    }
    echo 
"</ol>";
    echo 
"</ol>";
  }

}

// ###################### Start user #######################
if ($action=="user") {

  if (
$from=="" || isset($from)==0) {
    
$from 0;
  }
  
$perpage 20;

  echo 
"<ol>";

  
$numbersmembers=$DB_site->query_first("SELECT COUNT(userid) AS users FROM user");
  
$numbermembers=$numbersmembers[users];

  
$users=$DB_site->query("SELECT username,posts,userid FROM user ORDER BY posts DESC LIMIT $from,$perpage");
  while (
$user=$DB_site->fetch_array($users)) {
    
$userid $user[userid];
    
$username $user[username];
    
$posts $user[posts];
    
$sizes $DB_site->query_first("SELECT SUM(LENGTH(pagetext)) AS sizes FROM post WHERE userid=$userid");
    
$size $sizes[sizes];
    echo 
"<li><a href=user.php?action=edit&userid=$userid>$username</a> : $posts 个帖子, 总共 ".getsize($size)." 字节</li>n";
  }

  echo 
"</ul>";

  echo 
"<p>".iif($from>0,"<a href=count.php?action=user&from=".($from-$perpage).">前 $perpage 个用户</a> | ","");
  echo 
iif($from+$perpage<$numbermembers,"<a href=count.php?action=user&from=".($from+$perpage).">后 $perpage 个用户</a>","")."</p>";

}

?>
</body>
</html>
”。完成!

这样,在控制面板便多了一个大小统计的功能。