原因:所谓“寸土尺金”,数据库空间可是很昂贵的东西——对于我们这些小玩家来说。所以这个东西应该有用。
优点:直接统计当前讨论区内所有帖子、模板这两个占空间最大的表的大小,能按论坛、用户查询。
自评:除了帖子和模板外,还有论坛的描述、用户的签名是比较会占数据库空间的,但一般可以忽略,所以就……
步骤:
⒈打开 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>
”。完成!
这样,在控制面板便多了一个大小统计的功能。
|