PHP目前不提供获取目录总大小的标准函数,尽管这比获得磁盘总空间更为常见,虽然可以使用exec()或system()做系统级调用du,du命令将 获得一个文件或目录的磁盘使用情况,但出于安全原因,这些函数通常是禁用的。要获得站点目录大小,使用递归适合此项任务。本补丁可在ECSHOP后台查看 站点目录和数据库大小。
一、/admin/index.php
$sys_info['socket'] = function_exists('fsockopen') ? $_LANG['yes'] : $_LANG['no'];
下面添加
/* 单位自动转换函数 */
function getRealSize($size)
{
$kb = 1024; // Kilobyte
$mb = 1024 * $kb; // Megabyte
$gb = 1024 * $mb; // Gigabyte
$tb = 1024 * $gb; // Terabyte
if($size < $kb)
{
return $size . ' B';
}
else if($size < $mb)
{
return round($size/$kb, 2) . ' KB';
}
else if($size < $gb)
{
return round($size/$mb, 2) . ' MB';
}
else if($size < $tb)
{
return round($size/$gb, 2) . ' GB';
}
else
{
return round($size/$tb, 2) . ' TB';
}
}
/* 站点目录大小 */
function getDirSize($dir)
{
$sizeResult = 0;
$handle = opendir($dir);
while (false !== ($FolderOrFile = readdir($handle)))
{
if($FolderOrFile != '.'&& $FolderOrFile != '..')
{
if(is_dir("$dir/$FolderOrFile"))
{
$sizeResult += getDirSize("$dir/$FolderOrFile");
}
else
{
$sizeResult += filesize("$dir/$FolderOrFile");
}
}
}
closedir($handle);
return $sizeResult;
}
$curStr = dirname(__FILE__);
$subStr = strrchr($curStr, '//');
$siteDir = substr($curStr, 0, strlen($curStr)-strlen($subStr));
$disk_size = getRealSize(getDirSize($siteDir));
/* 数据库大小 */
$ret = $db ->query("SHOW TABLE STATUS LIKE '" . mysql_like_quote($ecs->prefix) . "%'");
$row = array();
$mysql_size = 0;
while ($row = $db->fetchRow($ret))
{
$mysql_size += $row['Data_length'];
}
$mysql_size = getRealSize($mysql_size);
unset($ret);
$smarty->assign('disk_size', $disk_size);
$smarty->assign('mysql_size', $mysql_size);
二、/admin/templates/start.htm
下面添加
{$lang.disk_size} {$disk_size} {$lang.mysql_size} {$mysql_size}
三、/languages/zh_cn/admin/index.php中添加
$_LANG['disk_size'] = '站点目录大小:';
$_LANG['mysql_size'] = '数据库大小:';
评论列表()