注意空文件!
<?php
// 错误
$exp = floor(log($bytes) / log(1024));
// 正确
$exp = $bytes ? floor(log($bytes) / log(1024)) : 0;
?>
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
disk_total_space — 返回文件系统或磁盘分区的总大小
directory
文件系统或磁盘分区的目录。
返回总字节数,以浮点数形式,或在失败时返回 false
。
示例 #1 disk_total_space() 示例
<?php
// $ds 包含 "/ " 上可用的总字节数
$ds = disk_total_space("/");
// 在 Windows 上:
$ds = disk_total_space("C:");
$ds = disk_total_space("D:");
?>
注意: 此函数不适用于 远程文件,因为要检查的文件必须通过服务器的文件系统访问。
注意空文件!
<?php
// 错误
$exp = floor(log($bytes) / log(1024));
// 正确
$exp = $bytes ? floor(log($bytes) / log(1024)) : 0;
?>
对于一种非循环的方式来为字节数添加符号
<?php
function getSymbolByQuantity($bytes) {
$symbols = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB');
$exp = floor(log($bytes)/log(1024));
return sprintf('%.2f '.$symbol[$exp], ($bytes/pow(1024, floor($exp))));
}
要找到文件/目录的总大小,您必须区分两种情况
(仅在基于 Linux/Unix 的系统上!?)
您感兴趣
1) dir/subdirs 中文件的总大小
2) 您的 dir/subdirs/files 在磁盘上占用了多少空间
- 1) 和 2) 通常有所不同,具体取决于 inode 的大小
- 大多数情况下 2) 大于 1) (以任何 kB 为单位)
- filesize($file) 给出 1)
- "du -ab $file" 给出 2)
因此您必须选择您的情况!
在我的服务器上,我没有权限在 2) 的情况下使用 "exec du",所以我使用
$s = stat($file);
$size = $s[11]*$s[12]/8);
它计算 inode [12] 乘以它们的大小(以位为单位)[11]
希望这有助于正确计算已使用的磁盘空间... :-)
Andreas Dick
function roundsize($size){
$i=0;
$iec = array("B", "Kb", "Mb", "Gb", "Tb");
while (($size/1024)>1) {
$size=$size/1024;
$i++;}
return(round($size,1)." ".$iec[$i]);}
此函数的一个补充功能可能是列出可用的磁盘。在 Windows 上,以下是相关的代码
<?php
/**
* 在服务器上查找磁盘驱动器列表。
* @return array 数组值是现有磁盘。
*/
function get_disks(){
if(php_uname('s')=='Windows NT'){
// windows
$disks=`fsutil fsinfo drives`;
$disks=str_word_count($disks,1);
if($disks[0]!='Drives')return '';
unset($disks[0]);
foreach($disks as $key=>$disk)$disks[$key]=$disk.':\\';
return $disks;
}else{
// unix
$data=`mount`;
$data=explode(' ',$data);
$disks=array();
foreach($data as $token)if(substr($token,0,5)=='/dev/')$disks[]=$token;
return $disks;
}
}
?>
使用示例
<?php print_r(get_disks()); ?>
示例结果
数组
(
[1] => A:\
[2] => C:\
[3] => D:\
[4] => E:\
[5] => F:\
[6] => G:\
[7] => H:\
[8] => I:\
[9] => M:\
[10] => X:\
[11] => Z:\
)
警告:这也会找到空的磁盘驱动器(例如:CD 或 SMD 驱动器或更常见的软盘驱动器)。
警告 2:如果您想使用我的函数中的信息查找空间使用情况,请在磁盘函数前加上“@”,例如
$free=@disk_free_space('A:\\');
<?php
// 这是查看返回浮点数的更易读的方式
// $Bytes 包含 "/" 上的总字节数
$Bytes = disk_total_space("/");
function dataSize($Bytes)
{
$Type=array("", "kilo", "mega", "giga", "tera");
$counter=0;
while($Bytes>=1024)
{
$Bytes/=1024;
$counter++;
}
return("".$Bytes." ".$Type[$counter]."bytes");
}
?>
非常简单的函数,用于将字节转换为千字节、兆字节……
function ConvertBytes($number)
{
$len = strlen($number);
if($len < 4)
{
return sprintf("%d b", $number);
}
if($len >= 4 && $len <=6)
{
return sprintf("%0.2f Kb", $number/1024);
}
if($len >= 7 && $len <=9)
{
return sprintf("%0.2f Mb", $number/1024/1024);
}
return sprintf("%0.2f Gb", $number/1024/1024/1024);
}
PHP 6 已经上市,但仍然没有标准函数可以帮助检索目录大小,因为它必须计算磁盘空间,如 disk_total_space。虽然我们可以使用系统级调用,如 exec() 和 system(),但启用这些函数太冒险了。因此,我们寻找一种替代方法来计算目录大小。
解决方案:使用 php 检索目录大小
<?php
function get_dir_size($dir_name){
$dir_size =0;
if (is_dir($dir_name)) {
if ($dh = opendir($dir_name)) {
while (($file = readdir($dh)) !== false) {
if($file !=”.” && $file != “..”){
if(is_file($dir_name.”/”.$file)){
$dir_size += filesize($dir_name.”/”.$file);
}
/* 检查此目录中是否有任何新目录 */
if(is_dir($dir_name.”/”.$file)){
$dir_size += get_dir_size($dir_name.”/”.$file);
}
}
}
}
}
closedir($dh);
return $dir_size;
}
$dir_name = “directory name here”;
/* 1048576 字节 == 1MB */
$total_size= round((get_dir_size($dir_name) / 1048576),2) ;
print “Directory $dir_name size : $total_size MB”;
?>
根据您要达成的尺寸格式,分别将目录大小除以 1024 或 1024 * 1024 或 1024 * 1024 * 1024 以获得 KB 或 MB 或 GB。