注意空文件!
<?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) 目录/子目录中文件的总大小
2) 您的目录/子目录/文件使用了多少磁盘空间
- 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");
}
?>