disk_total_space

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

disk_total_space返回文件系统或磁盘分区的总大小

描述

disk_total_space(string $directory): float|false

给定一个包含目录的字符串,此函数将返回相应文件系统或磁盘分区上的总字节数。

参数

directory

文件系统或磁盘分区的目录。

返回值

返回总字节数,以浮点数形式,或在失败时返回 false

示例

示例 #1 disk_total_space() 示例

<?php
// $ds 包含 "/ " 上可用的总字节数
$ds = disk_total_space("/");

// 在 Windows 上:
$ds = disk_total_space("C:");
$ds = disk_total_space("D:");
?>

注释

注意: 此函数不适用于 远程文件,因为要检查的文件必须通过服务器的文件系统访问。

参见

添加注释

用户贡献的注释 9 个注释

9
Viitala
16 年前
注意空文件!

<?php

// 错误
$exp = floor(log($bytes) / log(1024));

// 正确
$exp = $bytes ? floor(log($bytes) / log(1024)) : 0;

?>
8
tularis at php dot net
17 年前
对于一种非循环的方式来为字节数添加符号
<?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))));
}
3
andudi at gmx dot ch
22 年前
要找到文件/目录的总大小,您必须区分两种情况
(仅在基于 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
2
JulieC
17 年前
"文件系统或磁盘分区" 不等于 Windows 的 "目录"。谢谢。
1
stierguy1 at msn dot com
17 年前
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]);}
0
cotact[at]covac-software[dot]com
14 年前
此函数的一个补充功能可能是列出可用的磁盘。在 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:\\');
-3
ryan at designedbyrayn dot co dot uk
10 年前
<?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");
}
?>
-4
nikolayku at tut dot by
17 年前
非常简单的函数,用于将字节转换为千字节、兆字节……

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);

}
-8
khumlo at gmail dot com
14 年前
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。
To Top